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_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_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"); xg->transaction=t; /*TODO*/ } } return 0; }
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; }
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; }
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_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; }