windows-nt/Source/XPSP1/NT/enduser/netmeeting/ui/conf/calllog.h
2020-09-26 16:20:57 +08:00

100 lines
3.1 KiB
C++

//
// CallLog.h
//
// Created: ChrisPi 10-17-96
//
#ifndef _CALLLOG_H_
#define _CALLLOG_H_
#include <cstring.hpp>
// CCallLogEntry flags:
const DWORD CLEF_ACCEPTED = 0x00000001;
const DWORD CLEF_REJECTED = 0x00000002;
const DWORD CLEF_AUTO_ACCEPTED = 0x00000004; // call was auto-accepted
const DWORD CLEF_TIMED_OUT = 0x00000008; // call was rejected due to timeout
const DWORD CLEF_SECURE = 0x00000010; // call was secure
const DWORD CLEF_NO_CALL = 0x40000000; // No call back information
const DWORD CLEF_DELETED = 0x80000000; // Record marked for deletion
// The header for a record in the call log file
typedef struct _tagLogHdr {
DWORD dwSize; // size of this entire record
DWORD dwCLEF; // CallLogEntry Flags (CLEF_*)
DWORD dwPF; // Participant flags (PF_*)
DWORD cbName; // size of szName, in bytes, including NULL
DWORD cbData; // size of rgData, in bytes
DWORD cbCert; // size of certificate data in bytes
SYSTEMTIME sysTime; // date/time of record creation
// WCHAR szName; // null terminated display name (in UNICODE)
// BYTE ri[]; // Roster Information
} LOGHDR;
typedef LOGHDR * PLOGHDR;
class CCallLog;
class CRosterInfo;
class CCallLogEntry
{
protected:
LPTSTR m_pszName;
DWORD m_dwFlags;
SYSTEMTIME m_st;
CRosterInfo* m_pri;
PBYTE m_pbCert;
ULONG m_cbCert;
DWORD m_dwFileOffset; // offset in log file
friend CCallLog;
public:
CCallLogEntry(LPCTSTR pcszName, DWORD dwFlags, CRosterInfo* pri,
LPVOID pvRosterData, PBYTE pbCert, ULONG cbCert, LPSYSTEMTIME pst, DWORD dwFileOffset);
~CCallLogEntry();
LPTSTR GetName() { return m_pszName; };
DWORD GetFlags() { return m_dwFlags; };
LPSYSTEMTIME GetTime() { return &m_st; };
CRosterInfo* GetRosterInfo() { return m_pri; };
DWORD GetFileOffset() { return m_dwFileOffset;};
};
class CCallLog : public CSimpleArray<CCallLogEntry*>
{
private:
BOOL m_fUseList; // if TRUE, add data to list
BOOL m_fDataRead; // if TRUE, data has been read
CSTRING m_strFile; // Filename
DWORD m_Expire; // Days before expiring an entry
int m_cTotalEntries; // Total number of records in the log
int m_cDeletedEntries; // Number of records marked for deletion
int m_cMaxEntries; // Configurable max entries in file
VOID InitLogData(LPCTSTR pszKey, LPCTSTR pszDefault);
HANDLE OpenLogFile(VOID);
BOOL ReadData(HANDLE hFile, PVOID pv, UINT cb);
HRESULT WriteData(HANDLE hFile, LPDWORD pdwOffset, PVOID pv, DWORD cb);
HRESULT ReadEntry(HANDLE hFile, DWORD * pdwFileOffset, CCallLogEntry** ppcle);
DWORD WriteEntry(LPCTSTR pcszName, PLOGHDR pLogHdr, CRosterInfo* pri, PBYTE pbCert, ULONG cbCert);
VOID LoadFileData(VOID);
VOID RewriteFile(VOID);
public:
CCallLog(LPCTSTR pszKey, LPCTSTR pszDefault);
~CCallLog();
HRESULT AddCall(LPCTSTR pcszName, PLOGHDR pLogHdr, CRosterInfo* pri, PBYTE pbCert, ULONG cbCert);
private:
HRESULT DeleteEntry(CCallLogEntry * pcle);
};
#endif // !_CALLLOG_H_