|
|
/****************************************************************************\
* * PICS.H --Structures for holding pics information * * Created: Jason Thomas * Updated: Ann McCurdy * \****************************************************************************/
#ifndef _PICS_H_
#define _PICS_H_
/*Includes---------------------------------------------------------*/ #include <npassert.h>
#include "array.h"
#include "resource.h"
#include "msluglob.h"
#include <ratings.h>
extern HKEY CreateRegKeyNT(LPCSTR pszKey); extern BOOL RunningOnNT(void);
extern char PicsDelimChar;
#define PICS_FILE_BUF_LEN 20000
#define PICS_STRING_BUF_LEN 1000
#define P_INFINITY 9999
#define N_INFINITY -9999
/*Simple PICS types------------------------------------------------*/
class ETN { private: int r; BOOL m_fInit; public: ETN() { m_fInit = FALSE; }
void Init() { m_fInit = TRUE; } void UnInit() { m_fInit = FALSE; } BOOL fIsInit() { return m_fInit; }
#ifdef DEBUG
void Set(int rIn); int Get(); #else
void Set(int rIn) { Init(); r = rIn; } int Get() { return r; } #endif
ETN* Duplicate(); };
const UINT ETB_VALUE = 0x01; const UINT ETB_ISINIT = 0x02; class ETB { private: UINT m_nFlags; public: ETB() { m_nFlags = 0; }
#ifdef DEBUG
BOOL Get(); void Set(BOOL b); #else
BOOL Get() { return m_nFlags & ETB_VALUE; } void Set(BOOL b) { m_nFlags = ETB_ISINIT | (b ? ETB_VALUE : 0); } #endif
ETB *Duplicate(); BOOL fIsInit() { return m_nFlags & ETB_ISINIT; } };
class ETS { private: char *pc; public: ETS() { pc = NULL; } ~ETS(); #ifdef DEBUG
char* Get(); #else
char *Get() { return pc; } #endif
void Set(const char *pIn); ETS* Duplicate(); void SetTo(char *pIn);
BOOL fIsInit() { return pc != NULL; } };
extern UINT EtBoolRegRead(ETB &etb, HKEY hKey, char *pKeyWord); extern UINT EtBoolRegWrite(ETB &etb, HKEY hKey, char *pKeyWord); extern UINT EtStringRegRead(ETS &ets, HKEY hKey, char *pKeyWord); extern UINT EtStringRegWrite(ETS &ets, HKEY hKey, char *pKeyWord); extern UINT EtNumRegRead(ETN &etn, HKEY hKey, char *pKeyWord); extern UINT EtNumRegWrite(ETN &etn, HKEY hKey, char *pKeyWord);
/*Complex PICS types-----------------------------------------------*/
enum RatObjectID { ROID_INVALID, /* dummy entry for terminating arrays */ ROID_PICSDOCUMENT, /* value representing the entire document (i.e., no token) */ ROID_PICSVERSION, ROID_RATINGSYSTEM, ROID_RATINGSERVICE, ROID_RATINGBUREAU, ROID_BUREAUREQUIRED, ROID_CATEGORY, ROID_TRANSMITAS, ROID_LABEL, ROID_VALUE, ROID_DEFAULT, ROID_DESCRIPTION, ROID_EXTENSION, ROID_MANDATORY, ROID_OPTIONAL, ROID_ICON, ROID_INTEGER, ROID_LABELONLY, ROID_MAX, ROID_MIN, ROID_MULTIVALUE, ROID_NAME, ROID_UNORDERED };
enum PICSRulesObjectID { PROID_INVALID, /* dummy entry for terminating arrays */ PROID_PICSVERSION, /* for holding the PICSRules version ID */ PROID_POLICY, /* for the Policy class */ PROID_EXPLANATION, PROID_REJECTBYURL, PROID_ACCEPTBYURL, PROID_REJECTIF, PROID_ACCEPTIF, PROID_ACCEPTUNLESS, PROID_REJECTUNLESS, PROID_NAME, /* for the name class */ PROID_RULENAME, PROID_DESCRIPTION, PROID_SOURCE, /* for the source class */ PROID_SOURCEURL, PROID_CREATIONTOOL, PROID_AUTHOR, PROID_LASTMODIFIED, PROID_SERVICEINFO, /* for the serviceinfo class */ PROID_SINAME, PROID_SHORTNAME, PROID_BUREAUURL, PROID_USEEMBEDDED, PROID_RATFILE, PROID_BUREAUUNAVAILABLE, PROID_OPTEXTENSION, /* for the optextension class */ PROID_EXTENSIONNAME, //PROID_SHORTNAME,
PROID_REQEXTENSION, //PROID_EXTENSIONNAME,
//PROID_SHORTNAME,
PROID_EXTENSION,
PROID_POLICYDEFAULT, PROID_NAMEDEFAULT, PROID_SOURCEDEFAULT, PROID_SERVICEINFODEFAULT, PROID_OPTEXTENSIONDEFAULT, PROID_REQEXTENSIONDEFAULT };
/* define some error codes */ const HRESULT RAT_E_BASE = 0x80050000; /* just a guess at a free area for internal use */ const HRESULT RAT_E_EXPECTEDLEFT = RAT_E_BASE + 1; /* expected left paren */ const HRESULT RAT_E_EXPECTEDRIGHT = RAT_E_BASE + 2; /* expected right paren */ const HRESULT RAT_E_EXPECTEDTOKEN = RAT_E_BASE + 3; /* expected unquoted token */ const HRESULT RAT_E_EXPECTEDSTRING = RAT_E_BASE + 4; /* expected quoted string */ const HRESULT RAT_E_EXPECTEDNUMBER = RAT_E_BASE + 5; /* expected number */ const HRESULT RAT_E_EXPECTEDBOOL = RAT_E_BASE + 6; /* expected boolean */ const HRESULT RAT_E_DUPLICATEITEM = RAT_E_BASE + 7; /* AO_SINGLE item appeared twice */ const HRESULT RAT_E_MISSINGITEM = RAT_E_BASE + 8; /* AO_MANDATORY item not found */ const HRESULT RAT_E_UNKNOWNITEM = RAT_E_BASE + 9; /* unrecognized token */ const HRESULT RAT_E_UNKNOWNMANDATORY= RAT_E_BASE + 10; /* unrecognized mandatory extension */ const HRESULT RAT_E_EXPECTEDEND = RAT_E_BASE + 11; /* expected end of file */
/* echo for PICSRules with different names for clarity */ const HRESULT PICSRULES_E_BASE = 0x80050000; /* just a guess at a free area for internal use */ const HRESULT PICSRULES_E_EXPECTEDLEFT = RAT_E_BASE + 1; /* expected left paren */ const HRESULT PICSRULES_E_EXPECTEDRIGHT = RAT_E_BASE + 2; /* expected right paren */ const HRESULT PICSRULES_E_EXPECTEDTOKEN = RAT_E_BASE + 3; /* expected unquoted token */ const HRESULT PICSRULES_E_EXPECTEDSTRING = RAT_E_BASE + 4; /* expected quoted string */ const HRESULT PICSRULES_E_EXPECTEDNUMBER = RAT_E_BASE + 5; /* expected number */ const HRESULT PICSRULES_E_EXPECTEDBOOL = RAT_E_BASE + 6; /* expected boolean */ const HRESULT PICSRULES_E_DUPLICATEITEM = RAT_E_BASE + 7; /* AO_SINGLE item appeared twice */ const HRESULT PICSRULES_E_MISSINGITEM = RAT_E_BASE + 8; /* AO_MANDATORY item not found */ const HRESULT PICSRULES_E_UNKNOWNITEM = RAT_E_BASE + 9; /* unrecognized token */ const HRESULT PICSRULES_E_UNKNOWNMANDATORY = RAT_E_BASE + 10; /* unrecognized mandatory extension */ const HRESULT PICSRULES_E_EXPECTEDEND = RAT_E_BASE + 11; /* expected end of file */ const HRESULT PICSRULES_E_SERVICEUNDEFINED = RAT_E_BASE + 12; /* a service referenced is undefined */ const HRESULT PICSRULES_E_REQEXTENSIONUSED = RAT_E_BASE + 13; /* an unknown required extension was used */ const HRESULT PICSRULES_E_VERSION = RAT_E_BASE + 14; /* a non-support version was presented */
/* A RatObjectHandler parses the contents of a parenthesized object and
* spits out a binary representation of that data, suitable for passing * to an object's AddItem function. It does not consume the ')' which * closes the object. */ class RatFileParser; typedef HRESULT (*RatObjectHandler)(LPSTR *ppszIn, LPVOID *ppOut, RatFileParser *pParser);
class PICSRulesFileParser; typedef HRESULT (*PICSRulesObjectHandler)(LPSTR *ppszIn, LPVOID *ppOut, PICSRulesFileParser *pParser);
class PicsCategory;
class PicsObjectBase { public: virtual HRESULT AddItem(RatObjectID roid, LPVOID pData) = 0; virtual HRESULT InitializeMyDefaults(PicsCategory *pCategory) = 0; };
class PICSRulesObjectBase { public: virtual HRESULT AddItem(PICSRulesObjectID proid, LPVOID pData) = 0; virtual HRESULT InitializeMyDefaults() = 0; };
const DWORD AO_SINGLE = 0x01; const DWORD AO_SEEN = 0x02; const DWORD AO_MANDATORY = 0x04;
struct AllowableOption { RatObjectID roid; DWORD fdwOptions; };
struct PICSRulesAllowableOption { PICSRulesObjectID roid; DWORD fdwOptions; };
class PicsEnum : public PicsObjectBase { private: public: ETS etstrName, etstrIcon, etstrDesc; ETN etnValue;
PicsEnum(); ~PicsEnum(); // char* Parse(char *pStreamIn);
HRESULT AddItem(RatObjectID roid, LPVOID pData); HRESULT InitializeMyDefaults(PicsCategory *pCategory); };
class PicsRatingSystem;
class PicsCategory : public PicsObjectBase { private: public: array<PicsCategory*> arrpPC; array<PicsEnum*> arrpPE; ETS etstrTransmitAs, etstrName, etstrIcon, etstrDesc; ETN etnMin, etnMax; ETB etfMulti, etfInteger, etfLabelled, etfUnordered; PicsRatingSystem *pPRS;
PicsCategory(); ~PicsCategory(); // char* Parse(char *pStreamIn, char *pBaseName, PicsCategory *pPCparent);
void FixupLimits(); void SetParents(PicsRatingSystem *pOwner);
HRESULT AddItem(RatObjectID roid, LPVOID pData); HRESULT InitializeMyDefaults(PicsCategory *pCategory); };
class PicsDefault : public PicsObjectBase { public: ETB etfInteger, etfLabelled, etfMulti, etfUnordered; ETN etnMax, etnMin;
PicsDefault(); ~PicsDefault();
HRESULT AddItem(RatObjectID roid, LPVOID pData); HRESULT InitializeMyDefaults(PicsCategory *pCategory); };
class PicsExtension : public PicsObjectBase { public: LPSTR m_pszRatingBureau;
PicsExtension(); ~PicsExtension();
HRESULT AddItem(RatObjectID roid, LPVOID pData); HRESULT InitializeMyDefaults(PicsCategory *pCategory); };
class PicsRatingSystem : public PicsObjectBase { private: public: array<PicsCategory*> arrpPC; ETS etstrFile, etstrName, etstrIcon, etstrDesc, etstrRatingService, etstrRatingSystem, etstrRatingBureau; ETN etnPicsVersion; ETB etbBureauRequired; PicsDefault * m_pDefaultOptions; DWORD dwFlags; UINT nErrLine;
PicsRatingSystem(); ~PicsRatingSystem(); HRESULT Parse(LPCSTR pszFile, LPSTR pStreamIn);
HRESULT AddItem(RatObjectID roid, LPVOID pData); HRESULT InitializeMyDefaults(PicsCategory *pCategory); void ReportError(HRESULT hres); };
/* bit values for PicsRatingSystem::dwFlags */ const DWORD PRS_ISVALID = 0x01; /* this rating system was loaded successfully */ const DWORD PRS_WASINVALID = 0x02; /* was invalid last time we tried to load it */
/* echo for PICSRules with different names for clarity */ #define PRRS_ISVALID PRS_ISVALID;
#define PRRS_WASINVALID PRS_WASINVALID;
class UserRating : public NLS_STR { public: INT m_nValue; UserRating *m_pNext; PicsCategory *m_pPC;
UserRating(); UserRating(UserRating *pCopyFrom); ~UserRating();
UserRating *Duplicate(void); void SetName(LPCSTR pszName) { *(NLS_STR *)this = pszName; } };
class UserRatingSystem : public NLS_STR { public: UserRating *m_pRatingList; UserRatingSystem *m_pNext; PicsRatingSystem *m_pPRS;
UserRatingSystem(); UserRatingSystem(UserRatingSystem *pCopyFrom); ~UserRatingSystem();
UserRating *FindRating(LPCSTR pszTransmitName); UINT AddRating(UserRating *pRating); UINT ReadFromRegistry(HKEY hkeyProvider); UINT WriteToRegistry(HKEY hkey);
UserRatingSystem *Duplicate(void); void SetName(LPCSTR pszName) { *(NLS_STR *)this = pszName; } };
UserRatingSystem *DuplicateRatingSystemList(UserRatingSystem *pOld); void DestroyRatingSystemList(UserRatingSystem *pList); UserRatingSystem *FindRatingSystem(UserRatingSystem *pList, LPCSTR pszName);
class PicsUser{ private: public: NLS_STR nlsUsername; BOOL fAllowUnknowns, fPleaseMom, fEnabled; UserRatingSystem *m_pRatingSystems;
PicsUser(); ~PicsUser();
UserRatingSystem *FindRatingSystem(LPCSTR pszSystemName) { return ::FindRatingSystem(m_pRatingSystems, pszSystemName); } UINT AddRatingSystem(UserRatingSystem *pRatingSystem); BOOL NewInstall(); UINT ReadFromRegistry(HKEY hkey, char *pszUserName); UINT WriteToRegistry(HKEY hkey); };
PicsUser *GetUserObject(LPCSTR pszUsername=NULL);
extern long GetStateCounter();
class PicsRatingSystemInfo { public: array<PicsRatingSystem*> arrpPRS; PicsUser * pUserObject; BOOL fRatingInstalled; ETS etstrRatingBureau; long nInfoRev; BOOL fStoreInRegistry; BOOL fSettingsValid; PSTR lpszFileName;
PicsRatingSystemInfo() { lpszFileName=NULL; nInfoRev = ::GetStateCounter(); }; ~PicsRatingSystemInfo();
BOOL Init(); BOOL FreshInstall(); void SaveRatingSystemInfo(); BOOL LoadProviderFiles(HKEY hKey);
protected: HKEY GetUserProfileKey( void ); };
extern PicsRatingSystemInfo *gPRSI;
void CheckGlobalInfoRev(void);
char* EtStringParse(ETS &ets, char *pIn, const char *pKeyWord, BOOL fParen); char* EtLabelParse(char *pIn, const char *pszLongName, const char *pszShortName); char* EtRatingParse(ETN &etn, ETS &ets, char *pInStream);
int MyMessageBox(HWND hwnd, UINT uText, UINT uTitle, UINT uType); int MyMessageBox(HWND hwnd, UINT uText, UINT uText2, UINT uTitle, UINT uType); int MyMessageBox(HWND hwnd, LPCSTR pszText, UINT uTitle, UINT uType); char *NonWhite(char *pIn); BOOL MyAtoi(char *pIn, int *i); LONG MyRegDeleteKey(HKEY hkey,LPCSTR pszSubkey); HRESULT LoadRatingSystem(LPCSTR pszFilename, PicsRatingSystem **pprsOut); INT_PTR DoProviderDialog(HWND hDlg, PicsRatingSystemInfo *pPRSI);
void DeleteUserSettings(PicsRatingSystem *pPRS); void CheckUserSettings(PicsRatingSystem *pPRS);
//
// Declarations for Custom
//
extern g_fIsRunningUnderCustom;
struct CustomRatingHelper { CustomRatingHelper(); ~CustomRatingHelper();
HMODULE hLibrary; CLSID clsid; CustomRatingHelper* pNextHelper; DWORD dwSort; };
/*Pics Tree Dialog Stuff------------------------------------------------------*/ struct PRSD { PicsRatingSystemInfo *pPRSI; PicsUser *pPU; UserRatingSystem *pTempRatings; HWND hwndBitmapCategory; HWND hwndBitmapLabel; BOOL fNewProviders; };
enum TreeNodeEnum{tneGeneral, tneAccessList, tneRatingSystemRoot, tneRatingSystemInfo, tneRatingSystemNode, tneNone};
struct TreeNode{ TreeNodeEnum tne; void *pData;
TreeNode(){} TreeNode(TreeNodeEnum tneInit, void* pDataInit){tne=tneInit;pData=pDataInit;} };
PicsRatingSystem *FindInstalledRatingSystem(LPCSTR pszRatingService); PicsCategory *FindInstalledCategory(array<PicsCategory *>&arrpPC, LPCSTR pszName);
HRESULT Ansi2Unicode(LPWSTR *pdest, LPCSTR src);
#endif
|