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 GWEN_STRINGLIST *sl; 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)); sl=AB_Transaction_GetRemoteName(t); s=NULL; if (sl) s=GWEN_StringList_FirstString(sl); 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"); sl=AB_Transaction_GetPurpose(t); s=NULL; if (sl) s=GWEN_StringList_FirstString(sl); 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"); AB_ImExporterContext_AddLog(ctx, GWEN_Buffer_GetStart(logbuf)); 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"); AB_ImExporterContext_AddLog(ctx, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); EBC_Provider_SetJobListStatus(EBC_Context_GetJobs(ectx), js); DBG_INFO(AQEBICS_LOGDOMAIN, "Done"); return 0; }
static PyObject *aqbanking_Account_transactions(aqbanking_Account* self, PyObject *args, PyObject *kwds) { int rv; double tmpDateTime = 0; const char *bank_code; const char *account_no; #if PY_VERSION_HEX >= 0x03030000 bank_code = PyUnicode_AsUTF8(self->bank_code); account_no = PyUnicode_AsUTF8(self->no); #else PyObject *s = _PyUnicode_AsDefaultEncodedString(self->bank_code, NULL); bank_code = PyBytes_AS_STRING(s); s = _PyUnicode_AsDefaultEncodedString(self->no, NULL); account_no = PyBytes_AS_STRING(s); #endif GWEN_TIME *gwTime; const char *dateFrom=NULL, *dateTo=NULL; static char *kwlist[] = {"dateFrom", "dateTo", NULL}; if (! PyArg_ParseTupleAndKeywords(args, kwds, "|ss", kwlist, &dateFrom, &dateTo)) { return NULL; } AB_ACCOUNT *a; AB_JOB *job = 0; AB_JOB_LIST2 *jl = 0; AB_IMEXPORTER_CONTEXT *ctx = 0; AB_IMEXPORTER_ACCOUNTINFO *ai; /*aqbanking_Transaction *trans = NULL;*/ PyObject *transList = PyList_New(0); // Valid data set? if (self->no == NULL) { PyErr_SetString(PyExc_AttributeError, "no"); } if (self->bank_code == NULL) { PyErr_SetString(PyExc_AttributeError, "bank_code"); } // Initialize aqbanking. rv = AB_create(self); if (rv > 0) { Py_DECREF(transList); return NULL; } // Let us find the account! a = AB_Banking_GetAccountByCodeAndNumber(self->ab, bank_code, account_no); if (!a) { PyErr_SetString(AccountNotFound, "Could not find the given account! "); Py_DECREF(transList); return NULL; } // Create job and execute it. job = AB_JobGetTransactions_new(a); if (dateFrom != NULL) { gwTime = GWEN_Time_fromString(dateFrom, "YYYYMMDD"); AB_JobGetTransactions_SetFromTime(job, gwTime); } if (dateTo != NULL) { gwTime = GWEN_Time_fromString(dateTo, "YYYYMMDD"); AB_JobGetTransactions_SetToTime(job, gwTime); } // Check for availability rv = AB_Job_CheckAvailability(job); if (rv) { PyErr_SetString(ExecutionFailed, "Transaction retrieval is not supported!"); Py_DECREF(transList); return NULL; } jl = AB_Job_List2_new(); AB_Job_List2_PushBack(jl, job); ctx = AB_ImExporterContext_new(); rv = AB_Banking_ExecuteJobs(self->ab, jl, ctx); if (rv) { PyErr_SetString(ExecutionFailed, "Could not retrieve transactions!"); Py_DECREF(transList); return NULL; } // With success. No process the result. ai = AB_ImExporterContext_GetFirstAccountInfo (ctx); while(ai) { const AB_TRANSACTION *t; t = AB_ImExporterAccountInfo_GetFirstTransaction(ai); while(t) { const AB_VALUE *v; AB_TRANSACTION_STATUS state; v=AB_Transaction_GetValue(t); if (v) { const GWEN_STRINGLIST *sl; const GWEN_TIME *tdtime; const char *purpose; const char *remoteName; aqbanking_Transaction *trans = (aqbanking_Transaction*) PyObject_CallObject((PyObject *) &aqbanking_TransactionType, NULL); /* The purpose (memo field) might contain multiple lines. * Therefore AqBanking stores the purpose in a string list * of which the first entry is used in this tutorial */ sl = AB_Transaction_GetPurpose(t); if (sl) { purpose = GWEN_StringList_FirstString(sl); if (purpose == NULL) { purpose = ""; } } else { purpose = ""; } #ifdef DEBUGSTDERR fprintf(stderr, "[%-10d]: [%-10s/%-10s][%-10s/%-10s] %-32s (%.2f %s)\n", AB_Transaction_GetUniqueId(t), AB_Transaction_GetRemoteIban(t), AB_Transaction_GetRemoteBic(t), AB_Transaction_GetRemoteAccountNumber(t), AB_Transaction_GetRemoteBankCode(t), purpose, AB_Value_GetValueAsDouble(v), AB_Value_GetCurrency(v) ); #endif tdtime = AB_Transaction_GetDate(t); tmpDateTime = PyLong_AsDouble(PyLong_FromSize_t(GWEN_Time_Seconds(tdtime))); trans->date = PyDate_FromTimestamp(Py_BuildValue("(O)", PyFloat_FromDouble(tmpDateTime))); tdtime = AB_Transaction_GetValutaDate(t); tmpDateTime = PyLong_AsDouble(PyLong_FromSize_t(GWEN_Time_Seconds(tdtime))); trans->valutaDate = PyDate_FromTimestamp(Py_BuildValue("(O)", PyFloat_FromDouble(tmpDateTime))); trans->purpose = PyUnicode_FromString(purpose); // Local user if (AB_Transaction_GetLocalAccountNumber(t) == NULL) { trans->localAccount = Py_None; Py_INCREF(Py_None); } else { trans->localAccount = PyUnicode_FromString(AB_Transaction_GetLocalAccountNumber(t)); } if (AB_Transaction_GetLocalBankCode(t) == NULL) { trans->localBank = Py_None; Py_INCREF(Py_None); } else { trans->localBank = PyUnicode_FromString(AB_Transaction_GetLocalBankCode(t)); } if (AB_Transaction_GetLocalIban(t) == NULL) { trans->localIban = Py_None; Py_INCREF(Py_None); } else { trans->localIban = PyUnicode_FromString(AB_Transaction_GetLocalIban(t)); } if (AB_Transaction_GetLocalBic(t) == NULL) { trans->localBic = Py_None; Py_INCREF(Py_None); } else { trans->localBic = PyUnicode_FromString(AB_Transaction_GetLocalBic(t)); } if (AB_Transaction_GetLocalName(t) == NULL) { trans->localName = Py_None; Py_INCREF(Py_None); } else { trans->localName = PyUnicode_FromString(AB_Transaction_GetLocalName(t)); } // Remote user if (AB_Transaction_GetRemoteAccountNumber(t) == NULL) { trans->remoteAccount = Py_None; Py_INCREF(Py_None); } else { trans->remoteAccount = PyUnicode_FromString(AB_Transaction_GetRemoteAccountNumber(t)); } if (AB_Transaction_GetRemoteBankCode(t) == NULL) { trans->remoteBank = Py_None; Py_INCREF(Py_None); } else { trans->remoteBank = PyUnicode_FromString(AB_Transaction_GetRemoteBankCode(t)); } if (AB_Transaction_GetRemoteIban(t) == NULL) { trans->remoteIban = Py_None; Py_INCREF(Py_None); } else { trans->remoteIban = PyUnicode_FromString(AB_Transaction_GetRemoteIban(t)); } if (AB_Transaction_GetRemoteBic(t) == NULL) { trans->remoteBic = Py_None; Py_INCREF(Py_None); } else { trans->remoteBic = PyUnicode_FromString(AB_Transaction_GetRemoteBic(t)); } if (AB_Transaction_GetRemoteName(t) == NULL) { trans->remoteName = Py_None; Py_INCREF(Py_None); } else { sl = AB_Transaction_GetRemoteName(t); remoteName = GWEN_StringList_FirstString(sl); if (remoteName == NULL) { trans->remoteName = Py_None; } else { trans->remoteName = PyUnicode_FromString(remoteName); } } trans->value = PyFloat_FromDouble(AB_Value_GetValueAsDouble(v)); trans->currency = PyUnicode_FromString("EUR"); trans->uniqueId = PyLong_FromLong(AB_Transaction_GetUniqueId(t)); if (AB_Transaction_GetTransactionText(t) == NULL) { trans->transactionText = PyUnicode_FromString(""); } else { trans->transactionText = PyUnicode_FromString(AB_Transaction_GetTransactionText(t)); } trans->transactionCode = PyLong_FromLong(AB_Transaction_GetTransactionCode(t)); trans->textKey = PyLong_FromLong(AB_Transaction_GetTextKey(t)); trans->textKeyExt = PyLong_FromLong(AB_Transaction_GetTextKeyExt(t)); if (AB_Transaction_GetMandateId(t) == NULL) { trans->sepaMandateId = Py_None; } else { trans->sepaMandateId = PyUnicode_FromString(AB_Transaction_GetMandateId(t)); } if (AB_Transaction_GetCustomerReference(t) == NULL) { trans->customerReference = PyUnicode_FromString(""); } else { trans->customerReference = PyUnicode_FromString(AB_Transaction_GetCustomerReference(t)); } if (AB_Transaction_GetBankReference(t) == NULL) { trans->bankReference = PyUnicode_FromString(""); } else { trans->bankReference = PyUnicode_FromString(AB_Transaction_GetBankReference(t)); } if (AB_Transaction_GetEndToEndReference(t) == NULL) { trans->endToEndReference = PyUnicode_FromString(""); } else { trans->endToEndReference = PyUnicode_FromString(AB_Transaction_GetEndToEndReference(t)); } trans->state = 0; state = AB_Transaction_GetStatus(t); switch(state) { case AB_Transaction_StatusUnknown: trans->state = -1; break; case AB_Transaction_StatusNone: trans->state = 0; break; case AB_Transaction_StatusAccepted: trans->state = 1; break; case AB_Transaction_StatusRejected: trans->state = 2; break; case AB_Transaction_StatusPending: trans->state = 4; break; case AB_Transaction_StatusSending: trans->state = 8; break; case AB_Transaction_StatusAutoReconciled: trans->state = 16; break; case AB_Transaction_StatusManuallyReconciled: trans->state = 32; break; case AB_Transaction_StatusRevoked: trans->state = 64; break; case AB_Transaction_StatusAborted: trans->state = 128; break; } PyList_Append(transList, (PyObject *)trans); Py_DECREF(trans); } t = AB_ImExporterAccountInfo_GetNextTransaction(ai); } ai = AB_ImExporterContext_GetNextAccountInfo(ctx); } // Free jobs. AB_Job_free(job); AB_Job_List2_free(jl); AB_ImExporterContext_free(ctx); // Exit aqbanking. rv = AB_free(self); if (rv > 0) { //Py_XDECREF(trans); Py_DECREF(transList); return NULL; } return transList; }
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_INFO(AQEBICS_LOGDOMAIN, "Please remember to purchase a license if you want to use the EBICS backend."); if (1) { GWEN_STRINGLIST *sl=GWEN_PathManager_GetPaths(AB_PM_LIBNAME, AB_PM_LOCALEDIR); const char *localedir=GWEN_StringList_FirstString(sl); int rv; rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, localedir); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not bind textdomain (%d)", rv); } else { rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8"); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not set codeset (%d)", rv); } } GWEN_StringList_free(sl); } 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 AHB_DTAUS__CreateSetC(GWEN_BUFFER *dst, GWEN_DB_NODE *cfg, GWEN_DB_NODE *xa, AB_VALUE *sumEUR, AB_VALUE *sumDEM, AB_VALUE *sumBankCodes, AB_VALUE *sumAccountIds){ unsigned int i; const char *p; char buffer[32]; int isDebitNote; int isEuro; unsigned int extSets; //unsigned int startPos; AB_VALUE *val; GWEN_STRINGLIST *purposeList; DBG_DEBUG(AQBANKING_LOGDOMAIN, "Creating C set"); /* ______________________________________________________________________ * preparations */ purposeList=GWEN_StringList_new(); /* cut purpose lines into manageable portions (max 27 chars) */ for (i=0; ; i++) { int slen; GWEN_BUFFER *nbuf; p=GWEN_DB_GetCharValue(xa, "purpose", i, 0); if (p==NULL) break; if (i>14) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many purpose lines (maxmimum is 14)"); GWEN_StringList_free(purposeList); return -1; } slen=strlen(p); nbuf=GWEN_Buffer_new(0, slen+1, 0, 1); AB_ImExporter_Utf8ToDta(p, -1, nbuf); p=GWEN_Buffer_GetStart(nbuf); while(*p) { while(*p>0 && *p<33) p++; slen=strlen(p); if (slen==0) break; else if (slen>27) { char *ns; ns=(char*) malloc(28); assert(ns); memmove(ns, p, 27); ns[27]=0; /* let stringlist take over ownership of the the string */ GWEN_StringList_AppendString(purposeList, ns, 1, 0); p+=27; } else { GWEN_StringList_AppendString(purposeList, p, 0, 0); break; } } GWEN_Buffer_free(nbuf); } /* for */ //startPos=GWEN_Buffer_GetPos(dst); GWEN_Buffer_AllocRoom(dst, 256); isDebitNote=(strcasecmp(GWEN_DB_GetCharValue(cfg, "type", 0, "transfer"), "debitnote")==0); isEuro=(strcasecmp(GWEN_DB_GetCharValue(cfg, "currency", 0, "EUR"), "EUR")==0); /* compute number of extension sets */ extSets=0; /* add purpose */ if (GWEN_StringList_Count(purposeList)) extSets+=GWEN_StringList_Count(purposeList)-1; /* add name */ for (i=1; i<2; i++) { /* max 1 extset for local name */ if (GWEN_DB_GetCharValue(xa, "localName", i, 0)==0) break; if (i>1) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many name lines (maxmimum is 2)"); GWEN_StringList_free(purposeList); return -1; } extSets++; } /* for */ /* add other name */ for (i=1; i<2; i++) { /* max 1 extset for remote name */ if (GWEN_DB_GetCharValue(xa, "remoteName", i, 0)==0) break; if (i>1) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many peer name lines (maxmimum is 2)"); GWEN_StringList_free(purposeList); return -1; } extSets++; } /* for */ /* check number of extension sets */ if (extSets>15) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many extension sets (%d)", extSets); GWEN_StringList_free(purposeList); return -1; } /* ______________________________________________________________________ * actually write C set */ /* field 1, 2: record header */ snprintf(buffer, sizeof(buffer), "%04d", 187+(extSets*29)); GWEN_Buffer_AppendString(dst, buffer); GWEN_Buffer_AppendByte(dst, 'C'); /* field 3: acting bank code */ if (AHB_DTAUS__AddNum(dst, 8, GWEN_DB_GetCharValue(cfg, "bankCode", 0, ""))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } /* field 4: destination bank code */ p=GWEN_DB_GetCharValue(xa, "remoteBankCode", 0, 0); if (p) { val=AB_Value_fromString(p); if (val==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad bank code"); GWEN_StringList_free(purposeList); return -1; } AB_Value_AddValue(sumBankCodes, val); AB_Value_free(val); if (AHB_DTAUS__AddNum(dst, 8, p)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Peer bank code missing"); GWEN_StringList_free(purposeList); return -1; } /* field 5: destination account id */ p=GWEN_DB_GetCharValue(xa, "remoteAccountNumber", 0, 0); if (p) { val=AB_Value_fromString(p); if (val==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad account id"); GWEN_StringList_free(purposeList); return -1; } AB_Value_AddValue(sumAccountIds, val); AB_Value_free(val); if (AHB_DTAUS__AddNum(dst, 10, p)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Peer account id missing"); GWEN_StringList_free(purposeList); return -1; } /* field 6: internal customer number (0s for now) */ for (i=0; i<13; i++) GWEN_Buffer_AppendByte(dst, '0'); /* field 7a: text key */ snprintf(buffer, sizeof(buffer), "%02d", GWEN_DB_GetIntValue(xa, "textkey", 0, isDebitNote?5:51)); if (AHB_DTAUS__AddNum(dst, 2, buffer)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } /* field 7b: text key extension */ snprintf(buffer, sizeof(buffer), "%03d", GWEN_DB_GetIntValue(xa, "textkeyext", 0, 0)); if (AHB_DTAUS__AddNum(dst, 3, buffer)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } /* field 8: bank internal field */ GWEN_Buffer_AppendByte(dst, ' '); /* field 9: value in DEM */ if (!isEuro) { val=AB_Value_fromString(GWEN_DB_GetCharValue(xa, "value/value", 0, "0,0")); if (val==NULL || AB_Value_IsZero(val)) { AB_Value_free(val); DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad DEM value:"); GWEN_StringList_free(purposeList); return -1; } AB_Value_AddValue(sumDEM, val); snprintf(buffer, sizeof(buffer), "%011.0f", AB_Value_GetValueAsDouble(val)*100.0); AB_Value_free(val); if (AHB_DTAUS__AddNum(dst, 11, buffer)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } } else { if (AHB_DTAUS__AddNum(dst, 11, "0")) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } } /* field 10: local bank code */ p=GWEN_DB_GetCharValue(xa, "localbankCode", 0, 0); if (!p) p=GWEN_DB_GetCharValue(cfg, "bankCode", 0, 0); if (!p) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No local bank code"); GWEN_StringList_free(purposeList); return -1; } if (AHB_DTAUS__AddNum(dst, 8, p)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } /* field 11: local account id */ p=GWEN_DB_GetCharValue(xa, "localAccountNumber", 0, 0); if (!p) GWEN_DB_GetCharValue(cfg, "accountId", 0, 0); if (!p) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No local account number"); GWEN_StringList_free(purposeList); return -1; } if (AHB_DTAUS__AddNum(dst, 10, p)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } /* field 12: value in EUR */ if (isEuro) { val=AB_Value_fromString(GWEN_DB_GetCharValue(xa, "value/value", 0, "0,0")); if (val==NULL || AB_Value_IsZero(val)) { AB_Value_free(val); DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad EUR value:"); GWEN_StringList_free(purposeList); return -1; } AB_Value_AddValue(sumEUR, val); snprintf(buffer, sizeof(buffer), "%011.0f", AB_Value_GetValueAsDouble(val)*100.0); AB_Value_free(val); if (AHB_DTAUS__AddNum(dst, 11, buffer)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } } else { if (AHB_DTAUS__AddNum(dst, 11, "0")) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } } /* field 13: blanks */ for (i=0; i<3; i++) GWEN_Buffer_AppendByte(dst, ' '); /* field 14a: peer name */ if (AHB_DTAUS__AddWord(dst, 27, GWEN_DB_GetCharValue(xa, "remoteName", 0, ""))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } /* field 14b: blanks */ for (i=0; i<8; i++) GWEN_Buffer_AppendByte(dst, ' '); /* field 15: name */ if (AHB_DTAUS__AddWord(dst, 27, GWEN_DB_GetCharValue(xa, "localname", 0, ""))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } /* field 16: purpose */ p=GWEN_StringList_FirstString(purposeList); if (p==NULL) p=""; if (AHB_DTAUS__AddWord(dst, 27, p)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } /* field 17a: currency */ if (isEuro) GWEN_Buffer_AppendByte(dst, '1'); else GWEN_Buffer_AppendByte(dst, ' '); /* field 17b: blanks */ for (i=0; i<2; i++) GWEN_Buffer_AppendByte(dst, ' '); /* field 18: number of extension sets */ snprintf(buffer, sizeof(buffer), "%02d", extSets); if (AHB_DTAUS__AddNum(dst, 2, buffer)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } if (extSets) { unsigned int writtenExtSets=0; /* now append extension sets */ /* add peer name lines */ for (i=1; i<2; i++) { /* max: 1 extset */ unsigned int j; p=GWEN_DB_GetCharValue(xa, "remoteName", i, 0); if (!p) break; /* append extension set */ GWEN_Buffer_AppendString(dst, "01"); if (AHB_DTAUS__AddWord(dst, 27, p)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } writtenExtSets++; if (writtenExtSets==2) /* 2 ext sets written, so we need to align "C 2.Satzabschnitt" to 128 now */ for (j=0; j<11; j++) GWEN_Buffer_AppendByte(dst, ' '); else if (writtenExtSets>2 && ((writtenExtSets-2) % 4)==0) /* "C 3-5.Satzabschnitt" complete, align to 128 bytes */ for (j=0; j<12; j++) GWEN_Buffer_AppendByte(dst, ' '); } /* for */ /* add purpose lines */ for (i=1; i<GWEN_StringList_Count(purposeList); i++) { unsigned int j; p=GWEN_StringList_StringAt(purposeList, i); if (!p) break; /* append extension set */ GWEN_Buffer_AppendString(dst, "02"); /* strings in the list are already in DTA charset */ if (AHB_DTAUS__AddDtaWord(dst, 27, p)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } writtenExtSets++; if (writtenExtSets==2) /* 2 ext sets written, so we need to align "C 2.Satzabschnitt" to 128 now */ for (j=0; j<11; j++) GWEN_Buffer_AppendByte(dst, ' '); else if (writtenExtSets>2 && ((writtenExtSets-2) % 4)==0) /* "C 3-5.Satzabschnitt" complete, align to 128 bytes */ for (j=0; j<12; j++) GWEN_Buffer_AppendByte(dst, ' '); } /* for */ /* add name lines */ for (i=1; i<2; i++) { /* max: 1 extset */ unsigned int j; p=GWEN_DB_GetCharValue(xa, "localname", i, 0); if (!p) break; /* append extension set */ GWEN_Buffer_AppendString(dst, "03"); if (AHB_DTAUS__AddWord(dst, 27, p)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); GWEN_StringList_free(purposeList); return -1; } writtenExtSets++; if (writtenExtSets==2) /* 2 ext sets written, so we need to align "C 2.Satzabschnitt" to 128 now */ for (j=0; j<11; j++) GWEN_Buffer_AppendByte(dst, ' '); else if (writtenExtSets>2 && ((writtenExtSets-2) % 4)==0) /* "C 3-5.Satzabschnitt" complete, align to 128 bytes */ for (j=0; j<12; j++) GWEN_Buffer_AppendByte(dst, ' '); } /* for */ } i=((GWEN_Buffer_GetUsedBytes(dst)+127) & ~127)-GWEN_Buffer_GetUsedBytes(dst); while(i--) GWEN_Buffer_AppendByte(dst, ' '); GWEN_StringList_free(purposeList); return 0; }
int APY_Provider_Init(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<currentVersion) { int rv; DBG_WARN(AQPAYPAL_LOGDOMAIN, "Updating configuration for AqPaypal (before init)"); rv=APY_Provider_UpdatePreInit(pro, lastVersion, currentVersion); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } } /* do some init (currently: none needed) */ /* update post-init */ if (lastVersion<currentVersion) { int rv; DBG_WARN(AQPAYPAL_LOGDOMAIN, "Updating configuration for AqPaypal (after init)"); rv=APY_Provider_UpdatePostInit(pro, lastVersion, currentVersion); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } } if (1) { 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(AQPAYPAL_LOGDOMAIN, "Could not bind textdomain (%d)", rv); } else { rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8"); if (rv) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not set codeset (%d)", rv); } } GWEN_StringList_free(sl); } DBG_NOTICE(AQPAYPAL_LOGDOMAIN, "Initializing AqPaypal backend"); return 0; }
int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; int err; GWEN_GUI *gui; const char *localedir; GWEN_STRINGLIST *slist; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "C", /* short option */ "cfgfile", /* long option */ "Specify the configuration file", /* short description */ "Specify the configuration file" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "forcePin", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "forcepin", /* long option */ "force pin entry", /* short description */ "force pin entry even if the error counter is not zero" }, { 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 */ } }; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); slist = GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_LOCALEDIR); assert(GWEN_StringList_Count(slist) > 0); localedir = GWEN_StringList_FirstString(slist); #ifdef HAVE_I18N setlocale(LC_ALL,""); if (bindtextdomain(PACKAGE, localedir)==0) fprintf(stderr, "Error binding locale\n"); #endif GWEN_StringList_free(slist); GWEN_Logger_Open(GCT_LOGDOMAIN, "gct-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); #ifdef DEBUG_GCT_TOOL GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Info); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); #else GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #endif #ifdef GCT_IS_EXPERIMENTAL fprintf(stderr, "\n"); fprintf(stderr, "\n"); fprintf(stderr, "=================== WARNING ===================\n"); fprintf(stderr, "This tool is still EXPERIMENTAL !!!\n"); fprintf(stderr, "Please DON'T USE it with your daily key files !\n"); fprintf(stderr, "===============================================\n"); fprintf(stderr, "\n"); fprintf(stderr, "\n"); #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"); 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("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"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" create:\n" " This command creates a crypt token" "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" showuser:\n" " Display user data stored on the " "token\n\n")); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } if (strcasecmp(cmd, "sign1")==0) { rv=signWithOld(db, argc, argv); } else if (strcasecmp(cmd, "sign2")==0) { rv=signWithNew(db, argc, argv); } else if (strcasecmp(cmd, "crypt1")==0) { rv=cryptWithOld(db, argc, argv); } else if (strcasecmp(cmd, "crypt2")==0) { rv=cryptWithNew(db, argc, argv); } else if (strcasecmp(cmd, "crypt3")==0) { rv=cryptWithNew2(db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; }
int AB_Banking_PluginSystemInit(void) { if (ab_plugin_init_count==0) { const char *s; GWEN_PLUGIN_MANAGER *pm; int rv; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(AQBANKING_LOGDOMAIN, rv); return rv; } 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 " (compiled at " COMPILE_DATETIME "): initialising"); /* 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 if (1) { GWEN_STRINGLIST *sl=GWEN_PathManager_GetPaths(AB_PM_LIBNAME, AB_PM_LOCALEDIR); const char *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); } /* define sysconf paths */ 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 /* define data paths */ 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 /* define wizard paths */ 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 /* create bankinfo plugin manager */ DBG_INFO(AQBANKING_LOGDOMAIN, "Registering bankinfo plugin manager"); pm=GWEN_PluginManager_new("bankinfo", AB_PM_LIBNAME); if (GWEN_PluginManager_Register(pm)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not register bankinfo plugin manager"); return GWEN_ERROR_GENERIC; } GWEN_PluginManager_AddPathFromWinReg(pm, AB_PM_LIBNAME, AB_BANKING_REGKEY_PATHS, AB_BANKING_REGKEY_BANKINFODIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PluginManager_AddRelPath(pm, AB_PM_LIBNAME, AQBANKING_PLUGINS DIRSEP AB_BANKINFO_PLUGIN_FOLDER, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PluginManager_AddPath(pm, AB_PM_LIBNAME, AQBANKING_PLUGINS DIRSEP AB_BANKINFO_PLUGIN_FOLDER); #endif ab_pluginManagerBankInfo=pm; /* create provider plugin manager */ DBG_INFO(AQBANKING_LOGDOMAIN, "Registering provider plugin manager"); pm=GWEN_PluginManager_new("provider", AB_PM_LIBNAME); if (GWEN_PluginManager_Register(pm)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not register provider plugin manager"); return GWEN_ERROR_GENERIC; } GWEN_PluginManager_AddPathFromWinReg(pm, AB_PM_LIBNAME, AB_BANKING_REGKEY_PATHS, AB_BANKING_REGKEY_PROVIDERDIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PluginManager_AddRelPath(pm, AB_PM_LIBNAME, AQBANKING_PLUGINS DIRSEP AB_PROVIDER_FOLDER, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PluginManager_AddPath(pm, AB_PM_LIBNAME, AQBANKING_PLUGINS DIRSEP AB_PROVIDER_FOLDER); #endif ab_pluginManagerProvider=pm; /* create imexporters plugin manager */ DBG_INFO(AQBANKING_LOGDOMAIN, "Registering imexporters plugin manager"); pm=GWEN_PluginManager_new("imexporter", AB_PM_LIBNAME); if (GWEN_PluginManager_Register(pm)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not register imexporters plugin manager"); return GWEN_ERROR_GENERIC; } GWEN_PluginManager_AddPathFromWinReg(pm, AB_PM_LIBNAME, AB_BANKING_REGKEY_PATHS, AB_BANKING_REGKEY_IMPORTERDIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PluginManager_AddRelPath(pm, AB_PM_LIBNAME, AQBANKING_PLUGINS DIRSEP AB_IMEXPORTER_FOLDER, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PluginManager_AddPath(pm, AB_PM_LIBNAME, AQBANKING_PLUGINS DIRSEP AB_IMEXPORTER_FOLDER); #endif ab_pluginManagerImExporter=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; } ab_imexporters=AB_ImExporter_List_new(); ab_bankInfoPlugins=AB_BankInfoPlugin_List_new(); } ab_plugin_init_count++; return 0; }