/**************************************************************************** Copyright (c) 1998 Microsoft Corporation Module Name: location.h Abstract: Location Object definitions Author: noela - 09/11/98 Notes: Rev History: ****************************************************************************/ #ifndef __LOCATION_H_ #define __LOCATION_H_ #include "utils.h" #include "loc_comn.h" #include "rules.h" #include "card.h" #define CITY_MANDATORY (1) #define CITY_OPTIONAL (-1) #define CITY_NONE (0) #define LONG_DISTANCE_CARRIER_MANDATORY (1) #define LONG_DISTANCE_CARRIER_OPTIONAL (-1) #define LONG_DISTANCE_CARRIER_NONE (0) #define INTERNATIONAL_CARRIER_MANDATORY (1) #define INTERNATIONAL_CARRIER_OPTIONAL (-1) #define INTERNATIONAL_CARRIER_NONE (0) //*************************************************************************** // // Class Definition - CCountry // //*************************************************************************** class CCountry { private: DWORD m_dwCountryID; DWORD m_dwCountryCode; DWORD m_dwCountryGroup; PWSTR m_pszCountryName; CRuleSet m_Rules; public: CCountry(); ~CCountry(); #ifdef TRACELOG DECLARE_TRACELOG_CLASS(CCountry) #endif STDMETHOD(Initialize) ( DWORD dwCountryID, DWORD dwCountryCode, DWORD dwCountryGroup, PWSTR pszCountryName, PWSTR pszInternationalRule, PWSTR pszLongDistanceRule, PWSTR pszLocalRule ); PWSTR GetInternationalRule(){return m_Rules.m_pszInternationalRule;} PWSTR GetLongDistanceRule(){return m_Rules.m_pszLongDistanceRule;} PWSTR GetLocalRule(){return m_Rules.m_pszLocalRule;} CRuleSet * GetRuleSet(){return &m_Rules;} DWORD GetCountryID(){return m_dwCountryID;} DWORD GetCountryCode(){return m_dwCountryCode;} DWORD GetCountryGroup(){return m_dwCountryGroup;} PWSTR GetCountryName(){return m_pszCountryName;} }; //*************************************************************************** // Fill out the list template typedef LinkedList CCountryList; typedef ListNode CCountryNode; //*************************************************************************** // // Class Definition - CCountries // //*************************************************************************** class CCountries { private: DWORD m_dwNumEntries; CCountryList m_CountryList; CCountryNode * m_hEnumNode; public: CCountries(); ~CCountries(); #ifdef TRACELOG DECLARE_TRACELOG_CLASS(CCountries) #endif HRESULT Initialize(void); // a sort of enumerator HRESULT Reset(void); HRESULT Next(DWORD NrElem, CCountry ** ppCountry, DWORD *pNrElemFetched); HRESULT Skip(DWORD NrElem); }; //*************************************************************************** // // Class Definition - CLocation // //*************************************************************************** class CLocation { private: PWSTR m_pszLocationName; PWSTR m_pszAreaCode; PWSTR m_pszLongDistanceCarrierCode; PWSTR m_pszInternationalCarrierCode; PWSTR m_pszLongDistanceAccessCode; PWSTR m_pszLocalAccessCode; PWSTR m_pszDisableCallWaitingCode; DWORD m_dwLocationID; DWORD m_dwCountryID; DWORD m_dwCountryCode; DWORD m_dwPreferredCardID; DWORD m_dwOptions; BOOL m_bFromRegistry; // Was this read from the registry // or only existed in memory, i.e // how do we delete it. BOOL m_bChanged; // has this entry changed while in // memory, if not we don't write it // back to server. DWORD m_dwNumRules; PWSTR m_pszTAPIDialingRule; // temp store used when processing rules AreaCodeRulePtrNode * m_hEnumNode; public: AreaCodeRulePtrList m_AreaCodeRuleList; public: CLocation(); ~CLocation(); #ifdef TRACELOG DECLARE_TRACELOG_CLASS(CLocation) #endif STDMETHOD(Initialize) ( PWSTR pszLocationName, PWSTR pszAreaCode, PWSTR pszLongDistanceCarrierCode, PWSTR pszInternationalCarrierCode, PWSTR pszLongDistanceAccessCode, PWSTR pszLocalAccessCode, PWSTR pszDisableCallWaitingCode, DWORD dwLocationID, DWORD dwCountryID, DWORD dwPreferredCardID, DWORD dwOptions, BOOL bFromRegistry = FALSE ); BOOL HasCallWaiting() {return m_dwOptions & LOCATION_HASCALLWAITING;} void UseCallWaiting(BOOL bCw); BOOL HasCallingCard(){return m_dwOptions & LOCATION_USECALLINGCARD;} void UseCallingCard(BOOL bCc); BOOL HasToneDialing(){return m_dwOptions & LOCATION_USETONEDIALING;} void UseToneDialing(BOOL bCc); PWSTR GetName(){return m_pszLocationName;} STDMETHOD (SetName)(PWSTR pszLocationName); PWSTR GetAreaCode(){return m_pszAreaCode;} STDMETHOD (SetAreaCode)(PWSTR pszAreaCode); PWSTR GetLongDistanceCarrierCode(){return m_pszLongDistanceCarrierCode;} STDMETHOD (SetLongDistanceCarrierCode)(PWSTR pszLongDistanceCarrierCode); PWSTR GetInternationalCarrierCode(){return m_pszInternationalCarrierCode;} STDMETHOD (SetInternationalCarrierCode)(PWSTR pszInternationalCarrierCode); PWSTR GetLongDistanceAccessCode(){return m_pszLongDistanceAccessCode;} STDMETHOD (SetLongDistanceAccessCode)(PWSTR pszLongDistanceAccessCode); PWSTR GetLocalAccessCode(){return m_pszLocalAccessCode;} STDMETHOD (SetLocalAccessCode)(PWSTR pszLocalAccessCode); PWSTR GetDisableCallWaitingCode(){return m_pszDisableCallWaitingCode;} STDMETHOD (SetDisableCallWaitingCode)(PWSTR pszDisableCallWaitingCode); DWORD GetLocationID() {return m_dwLocationID;} DWORD GetCountryID() {return m_dwCountryID;} void SetCountryID(DWORD dwID) {m_dwCountryID = dwID;} DWORD GetCountryCode(); //void SetCountryCode(DWORD dwCode) {m_dwCountryCode = dwCode;} DWORD GetPreferredCardID() {return m_dwPreferredCardID;} void SetPreferredCardID(DWORD dwID) {m_dwPreferredCardID = dwID;} BOOL FromRegistry(){return m_bFromRegistry;} LONG TranslateAddress(PCWSTR pszAddressIn, CCallingCard * pCallingCard, DWORD dwTranslateOptions, PDWORD pdwTranslateResults, PDWORD pdwDestCountryCode, PWSTR * pszDialableString, PWSTR * pszDisplayableString ); void CLocation::FindRule( DWORD dwTranslateResults, DWORD dwTranslateOptions, CCallingCard * pCard, CCountry * pCountry, PWSTR AreaCodeString, PWSTR SubscriberString, PWSTR * ppRule, PDWORD dwAccess ); STDMETHOD(WriteToRegistry)(); void AddRule(CAreaCodeRule *pNewRule) {m_AreaCodeRuleList.tail()->insert_after(pNewRule); m_dwNumRules++; m_bChanged = TRUE; } void RemoveRule(CAreaCodeRule *pRule); HRESULT ResetRules(void); HRESULT NextRule(DWORD NrElem, CAreaCodeRule **ppRule, DWORD *pNrElemFetched); HRESULT SkipRule(DWORD NrElem); DWORD TapiSize(); DWORD TapiPack(PLOCATION pLocation, DWORD dwTotalSize); DWORD GetNumRules(){return m_dwNumRules;} void Changed(){m_bChanged=TRUE;} HRESULT NewID(); // gets new ID from server }; typedef LinkedList CLocationList; typedef ListNode CLocationNode; //*************************************************************************** // // Class Definition - CLocations // //*************************************************************************** class CLocations { private: DWORD m_dwCurrentLocationID; DWORD m_dwNumEntries; CLocationList m_LocationList; CLocationList m_DeletedLocationList; // we need to remember these, so we // can delete their reistry entry CLocationNode * m_hEnumNode; public: CLocations(); ~CLocations(); #ifdef TRACELOG DECLARE_TRACELOG_CLASS(CLocations) #endif HRESULT Initialize(void); void Remove(CLocation * pLocation); void Remove(DWORD dwID); void Replace(CLocation * pLocOld, CLocation * pLocNew); void Add(CLocation * pLocation); HRESULT SaveToRegistry(void); DWORD GetCurrentLocationID() {return m_dwCurrentLocationID;} void SetCurrentLocationID(DWORD dwLocationID) {m_dwCurrentLocationID = dwLocationID;} DWORD GetNumLocations(void) const { return m_dwNumEntries; } ; HRESULT Reset(void); HRESULT Next(DWORD NrElem, CLocation **ppLocation, DWORD *pNrElemFetched); HRESULT Skip(DWORD NrElem); }; #endif //__LOCATION_H_