windows-nt/Source/XPSP1/NT/net/tapi/client/card.h
2020-09-26 16:20:57 +08:00

209 lines
5.8 KiB
C++

/****************************************************************************
Copyright (c) 1998 Microsoft Corporation
Module Name: card.h
Abstract: Calling Card Object definitions
Author: noela - 09/11/98
Notes:
Rev History:
****************************************************************************/
#ifndef __CARD_H_
#define __CARD_H_
#include "utils.h"
#include "rules.h"
#define MAXLEN_CARDNAME 96
#define MAXLEN_PIN 128
#define MAXLEN_RULE 128
#define CARD_BUILTIN 1
#define CARD_HIDE 2
// Calling Card Validation Flags
#define CCVF_NOCARDNAME 0x01
#define CCVF_NOCARDRULES 0x02
#define CCVF_NOCARDNUMBER 0x04
#define CCVF_NOPINNUMBER 0x08
#define CCVF_NOINTERNATIONALACCESSNUMBER 0x10
#define CCVF_NOLOCALACCESSNUMBER 0x20
#define CCVF_NOLONGDISTANCEACCESSNUMBER 0x40
//***************************************************************************
//
// Class Definition - CCallingCard
//
//***************************************************************************
class CCallingCard
{
private:
DWORD m_dwCardID;
PWSTR m_pszCardName;
DWORD m_dwFlags;
PWSTR m_pszPIN;
PWSTR m_pszEncryptedPIN;
PWSTR m_pszAccountNumber;
PWSTR m_pszLocalAccessNumber;
PWSTR m_pszLongDistanceAccessNumber;
PWSTR m_pszInternationalAccessNumber;
CRuleSet m_Rules;
HKEY m_hCard;
PTSTR m_pszCardPath;
BOOL m_bDirty;
BOOL m_bDeleted;
DWORD m_dwCryptInitResult;
private:
void CleanUp(void);
DWORD OpenCardKey(BOOL bWrite);
DWORD CloseCardKey();
DWORD ReadOneStringValue(PWSTR *pMember, const TCHAR *pszName);
DWORD EncryptPIN(void);
DWORD DecryptPIN(void);
public:
CCallingCard();
~CCallingCard();
DECLARE_TRACELOG_CLASS(CCallingCard)
HRESULT Initialize (
DWORD dwCardID,
PWSTR pszCardName,
DWORD dwFlags,
PWSTR pszPIN,
PWSTR pszAccountNumber,
PWSTR pszInternationalRule,
PWSTR pszLongDistanceRule,
PWSTR pszLocalRule,
PWSTR pszInternationalAccessNumber,
PWSTR pszLongDistanceAccessNumber,
PWSTR pszLocalAccessNumber
);
HRESULT Initialize ( DWORD dwCardID);
HRESULT SaveToRegistry(void);
HRESULT MarkDeleted(void);
DWORD IsMarkedDeleted(void) const {return m_bDeleted || (m_dwFlags & CARD_HIDE);};
DWORD IsMarkedHidden(void) const {return (m_dwFlags & CARD_HIDE) != 0;};
DWORD IsMarkedPermanent(void) const {return (m_dwFlags & CARD_BUILTIN) != 0;};
DWORD Validate(void);
#define GET_SET_METHOD(Member) \
PWSTR Get##Member(void) const { return m_psz##Member; }; \
HRESULT Set##Member(PWSTR) ;
GET_SET_METHOD(CardName)
GET_SET_METHOD(PIN);
GET_SET_METHOD(AccountNumber);
GET_SET_METHOD(InternationalAccessNumber);
GET_SET_METHOD(LongDistanceAccessNumber);
GET_SET_METHOD(LocalAccessNumber);
#define m_pszInternationalRule m_Rules.m_pszInternationalRule
#define m_pszLongDistanceRule m_Rules.m_pszLongDistanceRule
#define m_pszLocalRule m_Rules.m_pszLocalRule
GET_SET_METHOD(InternationalRule);
GET_SET_METHOD(LongDistanceRule);
GET_SET_METHOD(LocalRule);
#undef m_pszInternationalRule
#undef m_pszLongDistanceRule
#undef m_pszLocalRule
#undef GET_SET_METHOD
CRuleSet * GetRuleSet(){return &m_Rules;}
DWORD GetCardID(void) const {return m_dwCardID;}
HRESULT SetCardID(DWORD dwCardID) {m_dwCardID=dwCardID; return S_OK;}
};
//***************************************************************************
// Fill out the list template
typedef LinkedList<CCallingCard *> CCallingCardList;
typedef ListNode<CCallingCard *> CCallingCardNode;
//***************************************************************************
//
// Class Definition - CCallingCards
//
//***************************************************************************
class CCallingCards
{
private:
DWORD m_dwNumEntries;
DWORD m_dwNextID;
CCallingCardList m_CallingCardList;
CCallingCardList m_DeletedCallingCardList;
HKEY m_hCards;
CCallingCardNode *m_hEnumNode;
BOOL m_bEnumInclHidden;
private:
DWORD CreateFreshCards(void);
void InternalDeleteCard(CCallingCardNode *);
public:
CCallingCards();
~CCallingCards();
#ifdef TRACELOG
DECLARE_TRACELOG_CLASS(CCallingCards)
#endif
HRESULT Initialize(void);
HRESULT SaveToRegistry(void);
void AddCard(CCallingCard *pNewCard) {m_CallingCardList.tail()->insert_after(pNewCard); m_dwNumEntries++;};
void RemoveCard(CCallingCard *pCard);
void RemoveCard(DWORD dwID);
DWORD AllocNewCardID(void) { return m_dwNextID++; };
DWORD GetNumCards(void) const { return m_dwNumEntries; } ;
CCallingCard *GetCallingCard(DWORD dwID);
// a sort of enumerator
HRESULT Reset(BOOL bInclHidden);
HRESULT Next(DWORD NrElem, CCallingCard **, DWORD *pNrElemFetched);
HRESULT Skip(DWORD NrElem);
};
#endif //__CARD_H_