windows-nt/Source/XPSP1/NT/shell/ext/ratings/msrating/parselbl.h
2020-09-26 16:20:57 +08:00

159 lines
4.4 KiB
C++

#ifndef PARSE_LABEL_H
#define PARSE_LABEL_H
#include "ratings.h"
//t-markh 8/98
//extends GetBool() to true/false, yes/no, pass/fail for
//PICSRules support
enum PICSRulesBooleanSwitch
{
PR_BOOLEAN_TRUEFALSE,
PR_BOOLEAN_PASSFAIL,
PR_BOOLEAN_YESNO
};
//t-markh 8/98
//Definitions used by GetBool for PICSRules types
#define PR_YESNO_YES 1
#define PR_YESNO_NO 0
#define PR_PASSFAIL_PASS 1
#define PR_PASSFAIL_FAIL 0
void SkipWhitespace(LPSTR *ppsz);
BOOL IsEqualToken(LPCSTR pszTokenStart, LPCSTR pszTokenEnd, LPCSTR pszTokenToMatch);
LPSTR FindTokenEnd(LPSTR pszStart);
HRESULT GetBool(LPSTR *ppszToken, BOOL *pfOut, PICSRulesBooleanSwitch PRBoolSwitch=PR_BOOLEAN_TRUEFALSE);
HRESULT ParseNumber(LPSTR *ppszNumber, INT *pnOut, BOOL fPICSRules=FALSE);
HRESULT ParseTime(LPSTR pszTime, DWORD *pOut, BOOL fPICSRules=FALSE);
class COptionsBase
{
protected:
COptionsBase();
UINT m_cRef;
public:
void AddRef();
void Release();
virtual void Delete();
DWORD m_timeUntil; /* 'until' time, in UTC net format (secs since 1/1/1970) */
DWORD m_fdwFlags; /* see LBLOPT_XXX below */
LPSTR m_pszInvalidString; /* ptr to invalid or unrecognized string */
LPSTR m_pszURL; /* value of "for" option, may be NULL */
BOOL CheckUntil(DWORD timeCurrent); /* returns TRUE if 'until' option checks out */
BOOL CheckURL(LPCSTR pszURL); /* returns TRUE if 'for' option checks out */
};
const DWORD LBLOPT_GENERIC = 0x01;
const DWORD LBLOPT_INVALID = 0x02;
const DWORD LBLOPT_EXPIRED = 0x04;
const DWORD LBLOPT_WRONGURL = 0x08;
const DWORD LBLOPT_URLCHECKED = 0x10;
class CStaticOptions : public COptionsBase
{
public:
CStaticOptions() { }
};
class CDynamicOptions : public COptionsBase
{
public:
CDynamicOptions *m_pNext;
CDynamicOptions() { m_pNext = NULL; }
virtual void Delete();
};
class CParsedRating
{
public:
LPSTR pszTransmitName;
INT nValue;
COptionsBase *pOptions;
BOOL fFound; /* TRUE if matches a rating in the installed system */
BOOL fFailed; /* TRUE if exceeded user's limit */
};
class CParsedServiceInfo
{
private:
CParsedServiceInfo *m_pNext;
COptionsBase *m_poptCurrent;
CDynamicOptions *m_poptList;
LPSTR m_pszCurrent; /* for parsing routines */
void SkipWhitespace() { ::SkipWhitespace(&m_pszCurrent); }
public:
LPCSTR m_pszServiceName; /* service name URL, may be NULL if not reported */
LPCSTR m_pszErrorString; /* points to error string if error reported by site */
LPCSTR m_pszInvalidString; /* pointer to invalid or unrecognized string found */
BOOL m_fInstalled; /* TRUE if this rating system is installed on this machine */
CStaticOptions m_opt;
array<CParsedRating> aRatings;
CParsedServiceInfo();
~CParsedServiceInfo();
CParsedServiceInfo *Next() { return m_pNext; }
void Append(CParsedServiceInfo *pNew);
HRESULT Parse(LPSTR *ppszServiceInfo);
HRESULT ParseServiceError();
HRESULT ParseOptions(LPSTR pszTokenEnd, COptionsBase *pOpt,
CDynamicOptions **ppOptOut, LPCSTR pszOptionEndToken);
HRESULT ParseExtension(COptionsBase *pOpt);
HRESULT ParseExtensionData(COptionsBase *pOpt);
HRESULT ParseRating();
HRESULT ParseSingleLabel();
HRESULT ParseLabels();
};
class CParsedLabelList
{
private:
LPSTR m_pszList;
LPSTR m_pszCurrent;
HRESULT ParseServiceInfo();
void SkipWhitespace() { ::SkipWhitespace(&m_pszCurrent); }
public:
CParsedServiceInfo m_ServiceInfo;
LPCSTR m_pszInvalidString; /* pointer to invalid or unrecognized string found */
LPSTR m_pszURL; /* copy of URL we were originally given */
LPSTR m_pszOriginalLabel; /* copy of original, raw rating label */
BOOL m_fRated; /* TRUE if site is considered rated */
BOOL m_fDenied; /* TRUE if site is denied by a helper */
BOOL m_fIsHelper; /* TRUE if site is judged by a helper */
BOOL m_fNoRating; /* TRUE if site contains no ratings */
BOOL m_fIsCustomHelper;
LPSTR m_pszRatingName;
LPSTR m_pszRatingReason;
CParsedLabelList();
~CParsedLabelList();
HRESULT Parse(LPSTR pszCopy);
};
extern "C" {
HRESULT ParseLabelList(LPCSTR pszList, CParsedLabelList **ppParsed);
void FreeParsedLabelList(CParsedLabelList *pList);
}; /* extern "C" */
#endif