Example 1 : How to use the oedbx library
Implementation
#include <oedbx/dbxFileHeader.h>
#include <oedbx/dbxTree.h>
#include <oedbx/dbxFolderInfo.h>
#include <oedbx/dbxMessageInfo.h>
#include <oedbx/dbxMessage.h>
void ExtractAllMessages(const char * fileName, const char * logFile)
{
std::ifstream ins(fileName, std::ios::binary);
std::ofstream outf(logFile, std::ios::binary);
DbxFileHeader fileHeader(ins);
int4 address = fileHeader.GetValue(fhTreeRootNodePtr),
entries = fileHeader.GetValue(fhEntries );
if(address && entries)
{
DbxTree tree(ins,address,entries);
for(int4 j=0; j<entries; ++j)
{
address = tree.GetValue(j);
DbxMessageInfo messageInfo(ins,address);
int4 indexes = messageInfo.GetIndexes();
if(indexes&(1<<miiMessageAddress))
{
int4 messageAddress = messageInfo.GetValue(miiMessageAddress);
DbxMessage message(ins, messageAddress);
outf << "___Message___ : " << j << ((char)0x0d) << ((char)0x0a);
outf << message.GetText();
}
}
}
ins.close();
outf.close();
}
typedef std::map<std::string, int> Histogramm;
std::string GetDomain(const char * str)
{ std::string id(str), result;
std::string::size_type pos = id.find_last_of("@");
if(pos==std::string::npos) result = "";
else result = id.substr(pos, id.size()-pos-1);
return result;
}
void ShowAllDomains(const char * fileName, const char * logFile)
{ Histogramm histo;
std::ifstream ins(fileName, std::ios::binary);
std::ofstream outf(logFile);
DbxFileHeader fileHeader(ins);
int4 address = fileHeader.GetValue(fhTreeRootNodePtr),
entries = fileHeader.GetValue(fhEntries );
if(address && entries)
{
DbxTree tree(ins,address,entries);
for(int4 j=0; j<entries; ++j)
{
address = tree.GetValue(j);
DbxMessageInfo messageInfo(ins,address);
int4 indexes = messageInfo.GetIndexes();
if(indexes&(1<<0x07))
{
int4 length;
int1 * pointer;
pointer = messageInfo.GetValue(0x07, &length);
histo[GetDomain((char *)pointer)]++;
}
}
}
ins.close();
Histogramm::iterator pos = histo.begin(), end = histo.end();
while(pos!=end)
{ outf << std::setw(8) << (pos->second) << " : " << (pos->first) << std::endl;
++pos;
}
outf.close();
}
void ShowAllLocaleFolders(const char * fileName, const char * logFile)
{
std::ifstream ins(fileName, std::ios::binary);
std::ofstream outf(logFile);
DbxFileHeader fileHeader(ins);
const int4 treeNumber=2;
int4 address = fileHeader.GetValue(fhTreeRootNodePtr+treeNumber),
entries = fileHeader.GetValue(fhEntries +treeNumber);
if(address && entries)
{
DbxTree tree(ins,address,entries);
outf << "Index Parent Name" << std::endl;
for(int4 j=0; j<entries; ++j)
{
address = tree.GetValue(j);
DbxFolderInfo fInfo(ins,address);
int4 indexes = fInfo.GetIndexes();
if(indexes&(1<<fiiName))
{ outf<< std::left<< std::setw(8)<< (fInfo.GetValue(fiiIndex))
<< std::left<< std::setw(8)<< (fInfo.GetValue(fiiParentIndex))
<< fInfo.GetString(fiiName)
<< std::endl;
}
}
}
ins.close();
outf.close();
}
Home of OE dbx file format