LibOFX

ofx_request.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002          ofx_request.cpp
00003                              -------------------
00004     copyright            : (C) 2005 by Ace Jones
00005     email                : acejones@users.sourceforge.net
00006 ***************************************************************************/
00011 /***************************************************************************
00012  *                                                                         *
00013  *   This program is free software; you can redistribute it and/or modify  *
00014  *   it under the terms of the GNU General Public License as published by  *
00015  *   the Free Software Foundation; either version 2 of the License, or     *
00016  *   (at your option) any later version.                                   *
00017  *                                                                         *
00018  ***************************************************************************/
00019 
00020 #ifdef HAVE_CONFIG_H
00021 #include <config.h>
00022 #endif
00023 
00024 #include <cstring>
00025 #include <string>
00026 #include "messages.hh"
00027 #include "libofx.h"
00028 #include "ofx_request.hh"
00029 
00030 using namespace std;
00031 
00032 string time_t_to_ofxdatetime( time_t time )
00033 {
00034   static char buffer[51];
00035 
00036   strftime( buffer, 50, "%Y%m%d%H%M%S.000", localtime(&time) );
00037   buffer[50] = 0;
00038 
00039   return string(buffer);
00040 }
00041 
00042 string time_t_to_ofxdate( time_t time )
00043 {
00044   static char buffer[51];
00045 
00046   strftime( buffer, 50, "%Y%m%d", localtime(&time) );
00047   buffer[50] = 0;
00048 
00049   return string(buffer);
00050 }
00051 
00052 string OfxHeader(const char *hver)
00053 {
00054   if (hver == NULL || hver[0] == 0)
00055     hver = "102";
00056 
00057   if (strcmp(hver, "103") == 0)
00058     /* TODO: check for differences in version 102 and 103 */
00059     return string("OFXHEADER:100\r\n"
00060                   "DATA:OFXSGML\r\n"
00061                   "VERSION:103\r\n"
00062                   "SECURITY:NONE\r\n"
00063                   "ENCODING:USASCII\r\n"
00064                   "CHARSET:1252\r\n"
00065                   "COMPRESSION:NONE\r\n"
00066                   "OLDFILEUID:NONE\r\n"
00067                   "NEWFILEUID:")
00068            + time_t_to_ofxdatetime( time(NULL) )
00069            + string("\r\n\r\n");
00070   else
00071     return string("OFXHEADER:100\r\n"
00072                   "DATA:OFXSGML\r\n"
00073                   "VERSION:102\r\n"
00074                   "SECURITY:NONE\r\n"
00075                   "ENCODING:USASCII\r\n"
00076                   "CHARSET:1252\r\n"
00077                   "COMPRESSION:NONE\r\n"
00078                   "OLDFILEUID:NONE\r\n"
00079                   "NEWFILEUID:")
00080            + time_t_to_ofxdatetime( time(NULL) )
00081            + string("\r\n\r\n");
00082 }
00083 
00084 OfxAggregate OfxRequest::SignOnRequest(void) const
00085 {
00086   OfxAggregate fiTag("FI");
00087   fiTag.Add( "ORG", m_login.org );
00088   if ( strlen(m_login.fid) > 0 )
00089     fiTag.Add( "FID", m_login.fid );
00090 
00091   OfxAggregate sonrqTag("SONRQ");
00092   sonrqTag.Add( "DTCLIENT", time_t_to_ofxdatetime( time(NULL) ) );
00093   sonrqTag.Add( "USERID", m_login.userid);
00094   sonrqTag.Add( "USERPASS", m_login.userpass);
00095   sonrqTag.Add( "LANGUAGE", "ENG");
00096   sonrqTag.Add( fiTag );
00097   if ( strlen(m_login.appid) > 0 )
00098     sonrqTag.Add( "APPID", m_login.appid);
00099   else
00100     sonrqTag.Add( "APPID", "QWIN");
00101   if ( strlen(m_login.appver) > 0 )
00102     sonrqTag.Add( "APPVER", m_login.appver);
00103   else
00104     sonrqTag.Add( "APPVER", "1400");
00105 
00106   OfxAggregate signonmsgTag("SIGNONMSGSRQV1");
00107   signonmsgTag.Add( sonrqTag );
00108 
00109   return signonmsgTag;
00110 }
00111 
00112 OfxAggregate OfxRequest::RequestMessage(const string& _msgType, const string& _trnType, const OfxAggregate& _request) const
00113 {
00114   OfxAggregate trnrqTag( _trnType + "TRNRQ" );
00115   trnrqTag.Add( "TRNUID", time_t_to_ofxdatetime( time(NULL) ) );
00116   trnrqTag.Add( "CLTCOOKIE", "1" );
00117   trnrqTag.Add( _request );
00118 
00119   OfxAggregate result( _msgType + "MSGSRQV1" );
00120   result.Add( trnrqTag );
00121 
00122   return result;
00123 }