/***************************************************************************
libdbx.h - Header file for DBX handling Library
-------------------
begin : April 2001
copyright : (C) 2001 by David Smith
email : Dave.S@Earthcorp.com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
/*
libdbx - read dbx files as used by Outlook Express 5.0
*/
#ifndef _LIBDBX_H_
#define _LIBDBX_H_
#include <stdio.h>
#define LIBDBX_VERSION "1.0.3"
#ifdef _WIN32
# include <Windows.h>
# define FILETIME_DEFINED
#endif
#ifndef FILETIME_DEFINED
#define FILETIME_DEFINED
/* Win32 Filetime struct - copied from WINE */
typedef struct {
unsigned int dwLowDateTime;
unsigned int dwHighDateTime;
} FILETIME;
#endif
/* Control Structure */
struct dbxcontrolstruct {
FILE *fd; /* file descriptor of the dbx file */
int indexCount; /* number of elements in the following array */
int * indexes; /* array of indexes */
int type; /* type of DBX file */
};
typedef struct dbxcontrolstruct DBX;
/* Folder Entity - Extracted from folders.dbx */
struct dbxfolderstruct {
int num; /* index number of folder */
char type; /* is folder or email */
char *name; /* name of folder */
char *fname; /* filename of the folder */
int id; /* numeric id of the folder */
int parentid; /* numeric id of the parent folder */
};
typedef struct dbxfolderstruct DBXFOLDER;
/* Email Entity - Extracted from a mail type .dbx file */
struct dbxemailstruct {
int num; /* index number of item */
char type; /* is folder or email */
char *email; /* email contents */
char *psubject; /* Processed subject line (without RE: etc..) */
char *subject; /* original subject line */
char *messageid; /* message's mail id */
char *parent_message_ids; /* ids of parents */
char *sender_name;
char *sender_address;
char *recip_name;
char *recip_address;
FILETIME date; /* of what I am unsure */
int id; /* dbx id */
int data_offset; /* offset of the body portion in the dbx file */
int flag; /* flags of email */
char *oe_account_name; /* name of the account that accepted this email */
char *oe_account_num; /* string representation of the account number */
char *fetched_server; /* name of POP server message came from */
};
typedef struct dbxemailstruct DBXEMAIL;
/* Non-Entity - just the header type */
struct dbxnonstruct {
int num; /* not really important */
char type; /* used to determine the type of this object */
};
typedef struct dbxnonstruct DBXNON;
/* Global Variables */
extern int dbx_errno;
/* DBX Errors */
/*0 - No error. i.e. Success */
#define DBX_NOERROR 0
/*1 - dbx file operation failed (open or close)*/
#define DBX_BADFILE 1
/*2 - Reading of Item Count from dbx file failed */
#define DBX_ITEMCOUNT 2
/*3 - Reading of Index Pointer from dbx file failed */
#define DBX_INDEX_READ 3
/*4 - Number of indexes read from dbx file is less than expected*/
#define DBX_INDEX_UNDERREAD 4
/*5 - Number of indexes read from dbx file is greater than expected*/
#define DBX_INDEX_OVERREAD 5
/*6 - Request was made for index reference greater than exists (subscript out of range)*/
#define DBX_INDEXCOUNT 6
/*7 - Reading of data from dbx file failed */
#define DBX_DATA_READ 7
/*8 - Item is a news item not an email*/
#define DBX_NEWS_ITEM 8
/* Prototypes */
#ifdef __SUNPRO_C
# define const
#endif
#ifdef __cplusplus
extern "C" {
#endif
DBX *dbx_open(const char*);
DBX *dbx_open_stream(FILE *fp);
int dbx_close(DBX*);
int dbx_free(DBX *dbx, void *item);
int dbx_free_item(void *item);
void* dbx_get(DBX*, int, int);
int dbx_perror(const char*);
int dbx_free(DBX* handle, void *item);
int dbx_get_body(DBX* dbx, int start, char** ptr);
int dbx_get_email_body(DBX *dbx, DBXEMAIL* email);
int dbx_free_email_body(DBXEMAIL* email);
const char* dbx_strerror(int err);
#ifdef __cplusplus
}
#endif
/* Types of DBX file */
/* 0 - Contains emails */
#define DBX_TYPE_EMAIL 0
/* 1 - Contains news group items */
#define DBX_TYPE_NEWS 1
/* 2 - Contains the folder structure of Outlook */
#define DBX_TYPE_FOLDER 2
/* 3 - Contains a none entity structure */
#define DBX_TYPE_VOID 3
/* Fetch flags for dbx_get */
/* 1<<0 - Fetch the body */
#define DBX_FLAG_BODY 1<<0
/* Flag defines for email->flag */
/* 0x80 - Is Seen (10000000) */
#define DBX_EMAIL_FLAG_ISSEEN 0x80
#endif /* LIBDBX_H */