00001
00002
00003
00004
00005
00006 #include "FDMCustomizations.h"
00007 #include "vmsMemFile.h"
00008
00009 #define SAFE_DELETE_ARRAY(a) if (a) {delete [] a; a = NULL;}
00010
00011 vmsFDMCustomizations::vmsFDMCustomizations()
00012 {
00013 m_bUseBtn = FALSE;
00014 m_bShowFDMCustBtn = TRUE;
00015 m_dwAffiliateID = 0;
00016 m_xor.set_Key ("vmsFDMCustomizations-2nd");
00017 }
00018
00019 vmsFDMCustomizations::~vmsFDMCustomizations()
00020 {
00021
00022 }
00023
00024 void vmsFDMCustomizations::Load(HANDLE hFile)
00025 {
00026 Free ();
00027
00028 vmsMemFile file;
00029 DWORD dw;
00030 file.Use (hFile, TRUE);
00031 DecryptFile (file);
00032
00033 file.ReadFile (&dw, sizeof (dw));
00034 if (dw)
00035 throw _pszFDMCustomizationsErr;
00036
00037 LPSTR psz;
00038 ReadString (file, &psz);
00039 set_Customizer (psz);
00040 delete [] psz;
00041
00042 file.ReadFile (&m_dwAffiliateID, sizeof (DWORD));
00043
00044 file.ReadFile (&dw, sizeof (dw));
00045
00046 while (dw--)
00047 {
00048 vmsFDMBanner banner;
00049
00050 file.ReadFile (&banner.dwSize, sizeof (DWORD));
00051
00052 banner.pbImage = new BYTE [banner.dwSize];
00053
00054 file.ReadFile (banner.pbImage, banner.dwSize);
00055
00056 ReadString (file, &banner.pszLinksTo);
00057 file.ReadFile (banner.szType, 4);
00058
00059 AddBanner (banner);
00060 }
00061
00062 file.ReadFile (&m_bUseBtn, sizeof (m_bUseBtn));
00063
00064 if (m_bUseBtn)
00065 {
00066 ReadString (file, &m_Btn.pszText);
00067 ReadString (file, &m_Btn.pszLinksTo);
00068
00069 file.ReadFile (&m_Btn.dwSize, sizeof (DWORD));
00070
00071 m_Btn.pbIcon = new BYTE [m_Btn.dwSize];
00072
00073 file.ReadFile (m_Btn.pbIcon, m_Btn.dwSize);
00074 }
00075
00076 file.ReadFile (&m_bShowFDMCustBtn, sizeof (BOOL));
00077 }
00078
00079 void vmsFDMCustomizations::Save(HANDLE hFile)
00080 {
00081 DWORD dw;
00082
00083 vmsMemFile file;
00084 file.Use (hFile, FALSE);
00085
00086 dw = m_iKey;
00087 file.WriteFile (&dw, sizeof (dw));
00088
00089 dw = 0;
00090 file.WriteFile (&dw, sizeof (dw));
00091
00092 WriteString (file, get_Customizer ());
00093
00094 file.WriteFile (&m_dwAffiliateID, sizeof (DWORD));
00095
00096 dw = m_vBanners.size ();
00097 file.WriteFile (&dw, sizeof (dw));
00098
00099 for (int i = 0; i < m_vBanners.size (); i++)
00100 {
00101
00102 vmsFDMBanner* banner = &m_vBanners [i];
00103
00104 file.WriteFile (&banner->dwSize, sizeof (dw));
00105
00106 file.WriteFile (banner->pbImage, banner->dwSize);
00107
00108 WriteString (file, banner->pszLinksTo);
00109 file.WriteFile (banner->szType, 4);
00110 }
00111
00112 file.WriteFile (&m_bUseBtn, sizeof (m_bUseBtn));
00113
00114 if (m_bUseBtn)
00115 {
00116 WriteString (file, m_Btn.pszText);
00117 WriteString (file, m_Btn.pszLinksTo);
00118
00119 file.WriteFile (&m_Btn.dwSize, sizeof (DWORD));
00120
00121 file.WriteFile (m_Btn.pbIcon, m_Btn.dwSize);
00122 }
00123
00124 file.WriteFile (&m_bShowFDMCustBtn, sizeof (BOOL));
00125
00126 EncryptFile (file);
00127 file.Done ();
00128 }
00129
00130 void vmsFDMCustomizations::Free()
00131 {
00132 RemoveAllBanners ();
00133
00134 SAFE_DELETE_ARRAY (m_Btn.pszText);
00135 SAFE_DELETE_ARRAY (m_Btn.pszLinksTo);
00136 SAFE_DELETE_ARRAY (m_Btn.pbIcon);
00137 }
00138
00139 void vmsFDMCustomizations::WriteString(vmsMemFile &file, LPCSTR psz)
00140 {
00141 DWORD dw = lstrlen (psz);
00142
00143 file.WriteFile (&dw, sizeof (dw));
00144 file.WriteFile (psz, dw);
00145 }
00146
00147 void vmsFDMCustomizations::ReadString(vmsMemFile &file, LPSTR *ppsz)
00148 {
00149 DWORD dw;
00150
00151 *ppsz = NULL;
00152
00153 file.ReadFile (&dw, sizeof (dw));
00154
00155 *ppsz = new char [dw+1];
00156
00157 file.ReadFile (*ppsz, dw);
00158 (*ppsz)[dw] = 0;
00159 }
00160
00161 void vmsFDMCustomizations::AddBanner(vmsFDMBanner &banner)
00162 {
00163 m_vBanners.push_back (banner);
00164 }
00165
00166 int vmsFDMCustomizations::get_BannerCount()
00167 {
00168 return m_vBanners.size ();
00169 }
00170
00171 vmsFDMBanner* vmsFDMCustomizations::get_Banner(int iIndex)
00172 {
00173 return &m_vBanners [iIndex];
00174 }
00175
00176 BOOL vmsFDMCustomizations::get_UseButton()
00177 {
00178 return m_bUseBtn;
00179 }
00180
00181 vmsFDMButton* vmsFDMCustomizations::get_ButtonInfo()
00182 {
00183 return &m_Btn;
00184 }
00185
00186 void vmsFDMCustomizations::RemoveAllBanners()
00187 {
00188 for (int i = 0; i < m_vBanners.size (); i++)
00189 {
00190 delete [] m_vBanners [i].pbImage;
00191 delete [] m_vBanners [i].pszLinksTo;
00192 }
00193 m_vBanners.clear ();
00194 }
00195
00196 void vmsFDMCustomizations::set_UseButton(BOOL bUse)
00197 {
00198 m_bUseBtn = bUse;
00199 }
00200
00201 void vmsFDMCustomizations::set_ButtonInfo(vmsFDMButton &btn)
00202 {
00203 SAFE_DELETE_ARRAY (m_Btn.pszText);
00204 SAFE_DELETE_ARRAY (m_Btn.pszLinksTo);
00205 SAFE_DELETE_ARRAY (m_Btn.pbIcon);
00206 m_Btn = btn;
00207 }
00208
00209 void vmsFDMCustomizations::set_Customizer(LPCSTR psz)
00210 {
00211 m_strCustomizer = psz;
00212 }
00213
00214 LPCSTR vmsFDMCustomizations::get_Customizer()
00215 {
00216 return m_strCustomizer.c_str ();
00217 }
00218
00219 void vmsFDMCustomizations::set_DESKey(DES_KEY key)
00220 {
00221 m_des.set_Key (key);
00222 }
00223
00224 void vmsFDMCustomizations::EncryptFile(vmsMemFile &file)
00225 {
00226 DWORD dwSize = file.get_FileBufferSize () - 4;
00227
00228 DWORD dw = 8 - (dwSize % 8);
00229 if (dw != 8)
00230 file.WriteFile ("\0\0\0\0\0\0\0", dw);
00231
00232 LPBYTE pb = file.get_FileBuffer () + 4;
00233 dwSize = file.get_FileBufferSize () - 4;
00234
00235 LPBYTE pbRes = new BYTE [dwSize];
00236 m_des.Encrypt (pb, pbRes, dwSize);
00237 m_xor.Encrypt (pbRes, pbRes, dwSize);
00238 CopyMemory (pb, pbRes, dwSize);
00239 delete [] pbRes;
00240 }
00241
00242 void vmsFDMCustomizations::DecryptFile(vmsMemFile &file)
00243 {
00244 DWORD dwPWDInfo;
00245 file.ReadFile (&dwPWDInfo, sizeof (DWORD));
00246 set_Key (dwPWDInfo);
00247
00248 LPBYTE pb = file.get_FileBuffer () + 4;
00249 DWORD dwSize = file.get_FileBufferSize () - 4;
00250 LPBYTE pbRes = new BYTE [dwSize];
00251 m_xor.Decrypt (pb, pb, dwSize);
00252 m_des.Decrypt (pb, pbRes, dwSize);
00253 CopyMemory (pb, pbRes, dwSize);
00254 delete [] pbRes;
00255 }
00256
00257 DWORD vmsFDMCustomizations::get_AffiliateID()
00258 {
00259 return m_dwAffiliateID;
00260 }
00261
00262 void vmsFDMCustomizations::set_AffiliateID(DWORD dw)
00263 {
00264 m_dwAffiliateID = dw;
00265 }
00266
00267 BOOL vmsFDMCustomizations::get_ShowFDMCustBtn()
00268 {
00269 return m_bShowFDMCustBtn;
00270 }
00271
00272 void vmsFDMCustomizations::set_ShowFDMCustBtn(BOOL b)
00273 {
00274 m_bShowFDMCustBtn = b;
00275 }
00276
00277 void vmsFDMCustomizations::set_Key(int iKey)
00278 {
00279 char szKey [100];
00280
00281 szKey [0] = 'F'; szKey [1] = 'D'; szKey [2] = 'M';
00282 szKey [3] = 'C'; szKey [4] = '_'; szKey [5] = 'F';
00283 szKey [6] = 'K'; szKey [7] = '0';
00284
00285 switch (iKey)
00286 {
00287 case 0:
00288 break;
00289
00290 case 1:
00291 szKey [5] = 'S'; szKey [7] = '1';
00292 break;
00293
00294 case 2:
00295 szKey [5] = 'P'; szKey [7] = '2';
00296 break;
00297
00298 default:
00299 throw _pszFDMCustomizationsErr;
00300 }
00301
00302 set_DESKey ((DES_KEY)szKey);
00303 m_iKey = iKey;
00304 }