LibOFX
libofx-0.9.10/inc/libofx.h
Go to the documentation of this file.
1 /*-*-c-*-*******************************************************************
2  libofx.h - Main header file for the libofx API
3  -------------------
4  copyright : (C) 2002-2011 by Benoit GrĂ©goire
5  email : benoitg@coeus.ca
6 ***************************************************************************/
26 /***************************************************************************
27  * *
28  * This program is free software; you can redistribute it and/or modify *
29  * it under the terms of the GNU General Public License as published by *
30  * the Free Software Foundation; either version 2 of the License, or *
31  * (at your option) any later version. *
32  * *
33  ***************************************************************************/
34 
35 #ifndef LIBOFX_H
36 #define LIBOFX_H
37 #include <time.h>
38 
39 #define LIBOFX_MAJOR_VERSION 0
40 #define LIBOFX_MINOR_VERSION 9
41 #define LIBOFX_MICRO_VERSION 10
42 #define LIBOFX_BUILD_VERSION 0
43 #define LIBOFX_VERSION_RELEASE_STRING "0.9.10"
44 
45 #ifdef IN_LIBOFX
46 # include "config.h"
47 # ifdef HAVE_GCC_VISIBILITY_EXTS
48 # pragma GCC visibility push(default)
49 # endif
50 #endif
51 
52 #ifdef __cplusplus
53 extern "C" {
54 #else
55 #define true 1
56 #define false 0
57 #endif
58 
59 #define OFX_ELEMENT_NAME_LENGTH 100
60 #define OFX_SVRTID2_LENGTH (36 + 1)
61 #define OFX_CHECK_NUMBER_LENGTH (12 + 1)
62 #define OFX_REFERENCE_NUMBER_LENGTH (32 + 1)
63 #define OFX_FITID_LENGTH (255 + 1)
64 #define OFX_TOKEN2_LENGTH (36 + 1)
65 #define OFX_MEMO_LENGTH (255 + 1)
66 #define OFX_FIID_LENGTH (32 + 1)
67 #define OFX_MEMO2_LENGTH (390 + 1)
68 #define OFX_BALANCE_NAME_LENGTH (32 + 1)
69 #define OFX_BALANCE_DESCRIPTION_LENGTH (80 + 1)
70 #define OFX_CURRENCY_LENGTH (3 + 1) /* In ISO-4217 format */
71 #define OFX_BANKID_LENGTH (9 + 1)
72 #define OFX_BRANCHID_LENGTH (22 + 1)
73 #define OFX_ACCTID_LENGTH (22 + 1)
74 #define OFX_ACCTKEY_LENGTH (22 + 1)
75 #define OFX_BROKERID_LENGTH (22 + 1)
76  /* Must be MAX of <BANKID>+<BRANCHID>+<ACCTID>, <ACCTID>+<ACCTKEY> and <ACCTID>+<BROKERID> */
77 #define OFX_ACCOUNT_ID_LENGTH (OFX_BANKID_LENGTH + OFX_BRANCHID_LENGTH + OFX_ACCTID_LENGTH + 1)
78 #define OFX_ACCOUNT_NAME_LENGTH 255
79 #define OFX_MARKETING_INFO_LENGTH (360 + 1)
80 #define OFX_TRANSACTION_NAME_LENGTH (96 + 1)
81 #define OFX_UNIQUE_ID_LENGTH (32 + 1)
82 #define OFX_UNIQUE_ID_TYPE_LENGTH (10 + 1)
83 #define OFX_SECNAME_LENGTH (32 + 1)
84 #define OFX_TICKER_LENGTH (32 + 1)
85 #define OFX_ORG_LENGTH (32 + 1)
86 #define OFX_FID_LENGTH (32 + 1)
87 #define OFX_USERID_LENGTH (32 + 1)
88 #define OFX_USERPASS_LENGTH (32 + 1)
89 #define OFX_URL_LENGTH (500 + 1)
90 #define OFX_APPID_LENGTH (32)
91 #define OFX_APPVER_LENGTH (32)
92 #define OFX_HEADERVERSION_LENGTH (32)
93 
94  /*
95  #define OFX_STATEMENT_CB 0;
96  #define OFX_ACCOUNT_CB 1;
97  #define OFX_TRACSACTION_CB 2;
98  #define OFX_SECURITY_CB 3;
99  #define OFX_STATUS_CB 4;
100  */
101 
102  typedef void * LibofxContextPtr;
103 
109  LibofxContextPtr libofx_get_new_context();
110 
116  int libofx_free_context( LibofxContextPtr );
117 
118  void libofx_set_dtd_dir(LibofxContextPtr libofx_context,
119  const char *s);
120 
123  {
125  OFX,
126  OFC,
127  QIF,
130  };
131 
132  struct LibofxFileFormatInfo
133  {
135  const char * format_name;
136  const char * description;
137  };
138 
139 
140 #ifndef OFX_AQUAMANIAC_UGLY_HACK1
141 
142  const struct LibofxFileFormatInfo LibofxImportFormatList[] =
143  {
144  {AUTODETECT, "AUTODETECT", "AUTODETECT (File format will be automatically detected later)"},
145  {OFX, "OFX", "OFX (Open Financial eXchange (OFX or QFX))"},
146  {OFC, "OFC", "OFC (Microsoft Open Financial Connectivity)"},
147  {QIF, "QIF", "QIF (Intuit Quicken Interchange Format) NOT IMPLEMENTED"},
148  {LAST, "LAST", "Not a file format, meant as a loop breaking condition"}
149  };
150 
151  const struct LibofxFileFormatInfo LibofxExportFormatList[] =
152  {
153  {QIF, "QIF", "QIF (Intuit Quicken Interchange Format) NOT IMPLEMENTED"},
154  {LAST, "LAST", "Not a file format, meant as a loop breaking condition"}
155  };
156 
168  enum LibofxFileFormat libofx_get_file_format_from_str(const struct LibofxFileFormatInfo format_list[], const char * file_type_string);
169 
181  const char * libofx_get_file_format_description(const struct LibofxFileFormatInfo format_list[], enum LibofxFileFormat file_format);
182 
183 #endif
184 
191  int libofx_proc_file(LibofxContextPtr libofx_context,
192  const char * p_filename,
193  enum LibofxFileFormat ftype);
194 
195 
208  struct OfxStatusData
209  {
214  char ofx_element_name[OFX_ELEMENT_NAME_LENGTH];
217 
222  int code;
223  const char* name;
224  const char* description;
225  int code_valid;
228  enum Severity
229  {
230  INFO,
231  WARN,
232  ERROR
233  } severity;
234  int severity_valid;
235 
241  char* server_message;
243  int server_message_valid;
245  };
246 
247 
257  typedef int (*LibofxProcStatusCallback)(const struct OfxStatusData data, void * status_data);
258 
270  struct OfxAccountData
271  {
272 
284  char account_id[OFX_ACCOUNT_ID_LENGTH];
285 
291  char account_name[OFX_ACCOUNT_NAME_LENGTH];
292  int account_id_valid;/* Use for both account_id and account_name */
293 
297  {
298  OFX_CHECKING,
299  OFX_SAVINGS,
300  OFX_MONEYMRKT,
302  OFX_CMA,
305  } account_type;
306  int account_type_valid;
307 
309  char currency[OFX_CURRENCY_LENGTH];
310  int currency_valid;
311 
313  char account_number[OFX_ACCTID_LENGTH];
314  int account_number_valid;
315 
317  char bank_id[OFX_BANKID_LENGTH];
318  int bank_id_valid;
319 
320  char broker_id[OFX_BROKERID_LENGTH];
321  int broker_id_valid;
322 
323  char branch_id[OFX_BRANCHID_LENGTH];
324  int branch_id_valid;
325 
326  };
327 
342  typedef int (*LibofxProcAccountCallback)(const struct OfxAccountData data, void * account_data);
343 
351  struct OfxSecurityData
352  {
360  char unique_id[OFX_UNIQUE_ID_LENGTH];
361  int unique_id_valid;
362 
363  char unique_id_type[OFX_UNIQUE_ID_TYPE_LENGTH];
365  int unique_id_type_valid;
366 
367  char secname[OFX_SECNAME_LENGTH];
368  int secname_valid;
369 
375  char ticker[OFX_TICKER_LENGTH];
376  int ticker_valid;
377 
378  double unitprice;
380  int unitprice_valid;
381 
382  time_t date_unitprice;
383  int date_unitprice_valid;
384 
387  char currency[OFX_CURRENCY_LENGTH];
388  int currency_valid;
389 
390  char memo[OFX_MEMO2_LENGTH];
391  int memo_valid;
392 
395  char fiid[OFX_FIID_LENGTH];
396  int fiid_valid;
397 
398  };/* end struct OfxSecurityData */
399 
413  typedef int (*LibofxProcSecurityCallback)(const struct OfxSecurityData data, void * security_data);
414 
415  typedef enum
416  {
434  } TransactionType;
435 
436  typedef enum
437  {
459 
460  typedef enum
461  {
467 
474  struct OfxTransactionData
475  {
476 
482  char account_id[OFX_ACCOUNT_ID_LENGTH];
485  struct OfxAccountData * account_ptr;
487  int account_id_valid;
488 
489  TransactionType transactiontype;
491 
495  InvTransactionType invtransactiontype;
496  int invtransactiontype_valid;
497 
505  double units;
506  int units_valid;
507 
508  double unitprice;
510  int unitprice_valid;
511 
512  double amount;
516  int amount_valid;
517 
518  char fi_id[256];
521  int fi_id_valid;
522 
530  char unique_id[OFX_UNIQUE_ID_LENGTH];
531  int unique_id_valid;
532  char unique_id_type[OFX_UNIQUE_ID_TYPE_LENGTH];
534  int unique_id_type_valid;
535 
536  struct OfxSecurityData *security_data_ptr;
538 
539  time_t date_posted;
544  int date_posted_valid;
545 
546  time_t date_initiated;
552  int date_initiated_valid;
553 
554  time_t date_funds_available;
557  int date_funds_available_valid;
558 
562  char fi_id_corrected[256];
563  int fi_id_corrected_valid;
564 
568  int fi_id_correction_action_valid;
569 
572  char server_transaction_id[OFX_SVRTID2_LENGTH];
573  int server_transaction_id_valid;
574 
578  char check_number[OFX_CHECK_NUMBER_LENGTH];
579  int check_number_valid;
580 
583  char reference_number[OFX_REFERENCE_NUMBER_LENGTH];
584  int reference_number_valid;
585 
586  long int standard_industrial_code;
588  int standard_industrial_code_valid;
589 
590  char payee_id[OFX_SVRTID2_LENGTH];
591  int payee_id_valid;
592 
593  char name[OFX_TRANSACTION_NAME_LENGTH];
595  int name_valid;
596 
597  char memo[OFX_MEMO2_LENGTH];
598  int memo_valid;
599 
600  double commission;
601  int commission_valid;
602 
603  double fees;
604  int fees_valid;
605 
606  double oldunits; /*number of units held before stock split */
607  int oldunits_valid;
608 
609  double newunits; /*number of units held after stock split */
610  int newunits_valid;
611 
612 
613  /*********** NOT YET COMPLETE!!! *********************/
614  };
615 
625  typedef int (*LibofxProcTransactionCallback)(const struct OfxTransactionData data, void * transaction_data);
626 
636  struct OfxStatementData
637  {
638 
646  char currency[OFX_CURRENCY_LENGTH];
647  int currency_valid;
648 
649  char account_id[OFX_ACCOUNT_ID_LENGTH];
651  struct OfxAccountData * account_ptr;
653  int account_id_valid;
654 
657  double ledger_balance;
658  int ledger_balance_valid;
659 
660  time_t ledger_balance_date;
661  int ledger_balance_date_valid;
662 
668  double available_balance;
671  int available_balance_valid;
672 
673  time_t available_balance_date;
675 
680  time_t date_start;
681  int date_start_valid;
682 
687  time_t date_end;
688  int date_end_valid;
689 
692  char marketing_info[OFX_MARKETING_INFO_LENGTH];
693  int marketing_info_valid;
694  };
695 
703  typedef int (*LibofxProcStatementCallback)(const struct OfxStatementData data, void * statement_data);
704 
708  struct OfxCurrency
709  {
710  char currency[OFX_CURRENCY_LENGTH];
711  double exchange_rate;
712  int must_convert;
713  };
714 
715 
722  void ofx_set_status_cb(LibofxContextPtr ctx,
724  void *user_data);
725 
732  void ofx_set_account_cb(LibofxContextPtr ctx,
734  void *user_data);
735 
742  void ofx_set_security_cb(LibofxContextPtr ctx,
744  void *user_data);
745 
752  void ofx_set_transaction_cb(LibofxContextPtr ctx,
754  void *user_data);
755 
762  void ofx_set_statement_cb(LibofxContextPtr ctx,
764  void *user_data);
765 
766 
770  int libofx_proc_buffer(LibofxContextPtr ctx,
771  const char *s, unsigned int size);
772 
773 
774  /* **************************************** */
775 
781 
785  struct OfxFiServiceInfo
786  {
787  char fid[OFX_FID_LENGTH];
788  char org[OFX_ORG_LENGTH];
789  char url[OFX_URL_LENGTH];
790  int accountlist;
791  int statements;
792  int billpay;
793  int investments;
794  };
795 
805  struct OfxFiLogin
806  {
807  char fid[OFX_FID_LENGTH];
808  char org[OFX_ORG_LENGTH];
809  char userid[OFX_USERID_LENGTH];
810  char userpass[OFX_USERPASS_LENGTH];
811  char header_version[OFX_HEADERVERSION_LENGTH];
812  char appid[OFX_APPID_LENGTH];
813  char appver[OFX_APPVER_LENGTH];
814  };
815 
816 #define OFX_AMOUNT_LENGTH (32 + 1)
817 #define OFX_PAYACCT_LENGTH (32 + 1)
818 #define OFX_STATE_LENGTH (5 + 1)
819 #define OFX_POSTALCODE_LENGTH (11 + 1)
820 #define OFX_NAME_LENGTH (32 + 1)
821 
822  struct OfxPayment
823  {
824  char amount[OFX_AMOUNT_LENGTH];
825  char account[OFX_PAYACCT_LENGTH];
826  char datedue[9];
827  char memo[OFX_MEMO_LENGTH];
828  };
829 
830  struct OfxPayee
831  {
832  char name[OFX_NAME_LENGTH];
833  char address1[OFX_NAME_LENGTH];
834  char city[OFX_NAME_LENGTH];
835  char state[OFX_STATE_LENGTH];
836  char postalcode[OFX_POSTALCODE_LENGTH];
837  char phone[OFX_NAME_LENGTH];
838  };
839 
851  char* libofx_request_statement( const struct OfxFiLogin* fi, const struct OfxAccountData* account, time_t date_from );
852 
863  char* libofx_request_accountinfo( const struct OfxFiLogin* login );
864 
865  char* libofx_request_payment( const struct OfxFiLogin* login, const struct OfxAccountData* account, const struct OfxPayee* payee, const struct OfxPayment* payment );
866 
867  char* libofx_request_payment_status( const struct OfxFiLogin* login, const char* transactionid );
868 
870 
871 extern int ofx_PARSER_msg;
872 extern int ofx_DEBUG_msg;
873 extern int ofx_DEBUG1_msg;
874 extern int ofx_DEBUG2_msg;
875 extern int ofx_DEBUG3_msg;
876 extern int ofx_DEBUG4_msg;
877 extern int ofx_DEBUG5_msg;
878 extern int ofx_STATUS_msg;
879 extern int ofx_INFO_msg;
880 extern int ofx_WARNING_msg;
881 extern int ofx_ERROR_msg;
882 extern int ofx_show_position;
884 #ifdef __cplusplus
885 } // end of extern "C"
886 #endif
887 
888 #if defined(HAVE_GCC_VISIBILITY_EXTS) && defined(IN_LIBOFX)
889 # pragma GCC visibility pop
890 #endif
891 
892 #endif // end of LIBOFX_H
time_t ledger_balance_date
Definition: inc/libofx.h:660
An abstraction of an account.
Definition: inc/libofx.h:270
int libofx_proc_file(LibofxContextPtr libofx_context, const char *p_filename, enum LibofxFileFormat ftype)
libofx_proc_file is the entry point of the library.
LibofxContextPtr libofx_get_new_context()
Initialise the library and return a new context.
Definition: context.cpp:153
enum LibofxFileFormat format
Definition: inc/libofx.h:134
char reference_number[OFX_REFERENCE_NUMBER_LENGTH]
Definition: inc/libofx.h:583
void ofx_set_security_cb(LibofxContextPtr ctx, LibofxProcSecurityCallback cb, void *user_data)
Definition: context.cpp:195
InvTransactionType
Definition: inc/libofx.h:436
double available_balance
Definition: inc/libofx.h:668
void ofx_set_transaction_cb(LibofxContextPtr ctx, LibofxProcTransactionCallback cb, void *user_data)
Definition: context.cpp:204
char unique_id[OFX_UNIQUE_ID_LENGTH]
Definition: inc/libofx.h:530
int(* LibofxProcAccountCallback)(const struct OfxAccountData data, void *account_data)
The callback function for the OfxAccountData stucture.
char account_id[OFX_ACCOUNT_ID_LENGTH]
Definition: inc/libofx.h:284
const char * description
Definition: inc/libofx.h:136
double exchange_rate
Definition: inc/libofx.h:711
int ofx_DEBUG3_msg
Definition: messages.cpp:34
const char * description
Definition: inc/libofx.h:224
char fi_id_corrected[256]
Definition: inc/libofx.h:562
int ofx_DEBUG_msg
Definition: messages.cpp:31
char currency[OFX_CURRENCY_LENGTH]
Definition: inc/libofx.h:309
char check_number[OFX_CHECK_NUMBER_LENGTH]
Definition: inc/libofx.h:578
int libofx_proc_buffer(LibofxContextPtr ctx, const char *s, unsigned int size)
int(* LibofxProcTransactionCallback)(const struct OfxTransactionData data, void *transaction_data)
The callback function for the OfxTransactionData stucture.
char name[OFX_TRANSACTION_NAME_LENGTH]
Definition: inc/libofx.h:593
int ofx_show_position
Definition: messages.cpp:41
char marketing_info[OFX_MARKETING_INFO_LENGTH]
Definition: inc/libofx.h:692
char memo[OFX_MEMO2_LENGTH]
Definition: inc/libofx.h:597
FiIdCorrectionAction fi_id_correction_action
Definition: inc/libofx.h:567
char currency[OFX_CURRENCY_LENGTH]
Definition: inc/libofx.h:387
int ofx_DEBUG4_msg
Definition: messages.cpp:35
int ofx_ERROR_msg
Definition: messages.cpp:40
void ofx_set_account_cb(LibofxContextPtr ctx, LibofxProcAccountCallback cb, void *user_data)
Definition: context.cpp:186
long int standard_industrial_code
Definition: inc/libofx.h:586
char account_id[OFX_ACCOUNT_ID_LENGTH]
Definition: inc/libofx.h:649
enum LibofxFileFormat libofx_get_file_format_from_str(const struct LibofxFileFormatInfo format_list[], const char *file_type_string)
libofx_get_file_type returns a proper enum from a file type string.
char memo[OFX_MEMO2_LENGTH]
Definition: inc/libofx.h:390
char fiid[OFX_FIID_LENGTH]
Definition: inc/libofx.h:395
void ofx_set_statement_cb(LibofxContextPtr ctx, LibofxProcStatementCallback cb, void *user_data)
Definition: context.cpp:213
char currency[OFX_CURRENCY_LENGTH]
Definition: inc/libofx.h:710
char * libofx_request_statement(const struct OfxFiLogin *fi, const struct OfxAccountData *account, time_t date_from)
Creates an OFX statement request in string form.
char account_id[OFX_ACCOUNT_ID_LENGTH]
Definition: inc/libofx.h:482
char unique_id[OFX_UNIQUE_ID_LENGTH]
Definition: inc/libofx.h:360
char account_name[OFX_ACCOUNT_NAME_LENGTH]
Definition: inc/libofx.h:291
FiIdCorrectionAction
Definition: inc/libofx.h:460
char * server_message
Definition: inc/libofx.h:241
struct OfxAccountData * account_ptr
Definition: inc/libofx.h:485
int ofx_WARNING_msg
Definition: messages.cpp:39
time_t date_unitprice
Definition: inc/libofx.h:382
TransactionType
Definition: inc/libofx.h:415
char server_transaction_id[OFX_SVRTID2_LENGTH]
Definition: inc/libofx.h:572
struct OfxAccountData * account_ptr
Definition: inc/libofx.h:651
const char * libofx_get_file_format_description(const struct LibofxFileFormatInfo format_list[], enum LibofxFileFormat file_format)
get_file_format_description returns a string description of a LibofxFileType.
char bank_id[OFX_BANKID_LENGTH]
Definition: inc/libofx.h:317
int(* LibofxProcStatementCallback)(const struct OfxStatementData data, void *statement_data)
The callback function for the OfxStatementData stucture.
An abstraction of an OFX STATUS element.
Definition: inc/libofx.h:208
int ofx_DEBUG2_msg
Definition: messages.cpp:33
double unitprice
Definition: inc/libofx.h:378
char unique_id_type[OFX_UNIQUE_ID_TYPE_LENGTH]
Definition: inc/libofx.h:363
void ofx_set_status_cb(LibofxContextPtr ctx, LibofxProcStatusCallback cb, void *user_data)
Definition: context.cpp:178
int libofx_free_context(LibofxContextPtr)
Free all ressources used by this context.
Definition: context.cpp:158
char * libofx_request_accountinfo(const struct OfxFiLogin *login)
Creates an OFX account info (list) request in string form.
int ofx_STATUS_msg
Definition: messages.cpp:37
const char * format_name
Definition: inc/libofx.h:135
int ofx_PARSER_msg
Definition: messages.cpp:30
int available_balance_date_valid
Definition: inc/libofx.h:674
char ticker[OFX_TICKER_LENGTH]
Definition: inc/libofx.h:375
Information returned by the OFX Partner Server about a financial institution.
Definition: inc/libofx.h:785
char payee_id[OFX_SVRTID2_LENGTH]
Definition: inc/libofx.h:590
An abstraction of a security, such as a stock, mutual fund, etc.
Definition: inc/libofx.h:351
int ofx_element_name_valid
Definition: inc/libofx.h:216
int ofx_INFO_msg
Definition: messages.cpp:38
int(* LibofxProcStatusCallback)(const struct OfxStatusData data, void *status_data)
The callback function for the OfxStatusData stucture.
int ofx_DEBUG1_msg
Definition: messages.cpp:32
int ofx_DEBUG5_msg
Definition: messages.cpp:36
An abstraction of a transaction in an account.
Definition: inc/libofx.h:474
int must_convert
Definition: inc/libofx.h:712
time_t date_funds_available
Definition: inc/libofx.h:554
NOT YET SUPPORTED.
Definition: inc/libofx.h:708
LibofxFileFormat
Definition: inc/libofx.h:122
const char * name
Definition: inc/libofx.h:223
int(* LibofxProcSecurityCallback)(const struct OfxSecurityData data, void *security_data)
The callback function for the OfxSecurityData stucture.
char account_number[OFX_ACCTID_LENGTH]
Definition: inc/libofx.h:313
char unique_id_type[OFX_UNIQUE_ID_TYPE_LENGTH]
Definition: inc/libofx.h:532
char currency[OFX_CURRENCY_LENGTH]
Definition: inc/libofx.h:646
double ledger_balance
Definition: inc/libofx.h:657
An abstraction of an account statement.
Definition: inc/libofx.h:636
char secname[OFX_SECNAME_LENGTH]
Definition: inc/libofx.h:367
Information sufficient to log into an financial institution.
Definition: inc/libofx.h:805