parselbl.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 4k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. //t-markh 8/98
  2. //extends GetBool() to true/false, yes/no, pass/fail for
  3. //PICSRules support
  4. enum PICSRulesBooleanSwitch
  5. {
  6.     PR_BOOLEAN_TRUEFALSE,
  7.     PR_BOOLEAN_PASSFAIL,
  8.     PR_BOOLEAN_YESNO
  9. };
  10. //t-markh 8/98
  11. //Definitions used by GetBool for PICSRules types
  12. #define PR_YESNO_YES    1
  13. #define PR_YESNO_NO     0
  14. #define PR_PASSFAIL_PASS    1
  15. #define PR_PASSFAIL_FAIL    0
  16. void SkipWhitespace(LPSTR *ppsz);
  17. BOOL IsEqualToken(LPCSTR pszTokenStart, LPCSTR pszTokenEnd, LPCSTR pszTokenToMatch);
  18. LPSTR FindTokenEnd(LPSTR pszStart);
  19. HRESULT GetBool(LPSTR *ppszToken, BOOL *pfOut, PICSRulesBooleanSwitch PRBoolSwitch=PR_BOOLEAN_TRUEFALSE);
  20. HRESULT ParseNumber(LPSTR *ppszNumber, INT *pnOut, BOOL fPICSRules=FALSE);
  21. HRESULT ParseTime(LPSTR pszTime, DWORD *pOut, BOOL fPICSRules=FALSE);
  22. class COptionsBase
  23. {
  24. protected:
  25.     COptionsBase();
  26.     UINT m_cRef;
  27. public:
  28.     void AddRef();
  29.     void Release();
  30.     virtual void Delete();
  31.     DWORD m_timeUntil;          /* 'until' time, in UTC net format (secs since 1/1/1970) */
  32.     DWORD m_fdwFlags;           /* see LBLOPT_XXX below */
  33.     LPSTR m_pszInvalidString;   /* ptr to invalid or unrecognized string */
  34.     LPSTR m_pszURL;             /* value of "for" option, may be NULL */
  35.     BOOL CheckUntil(DWORD timeCurrent); /* returns TRUE if 'until' option checks out */
  36.     BOOL CheckURL(LPCSTR pszURL);       /* returns TRUE if 'for' option checks out */
  37. };
  38. const DWORD LBLOPT_GENERIC = 0x01;
  39. const DWORD LBLOPT_INVALID = 0x02;
  40. const DWORD LBLOPT_EXPIRED = 0x04;
  41. const DWORD LBLOPT_WRONGURL = 0x08;
  42. const DWORD LBLOPT_URLCHECKED = 0x10;
  43. class CStaticOptions : public COptionsBase
  44. {
  45. public:
  46.     CStaticOptions() { }
  47. };
  48. class CDynamicOptions : public COptionsBase
  49. {
  50. public:
  51.     CDynamicOptions *m_pNext;
  52.     CDynamicOptions() { m_pNext = NULL; }
  53.     virtual void Delete();
  54. };
  55. class CParsedRating
  56. {
  57. public:
  58.     LPSTR pszTransmitName;
  59.     INT nValue;
  60.     COptionsBase *pOptions;
  61.     BOOL fFound;                /* TRUE if matches a rating in the installed system */
  62.     BOOL fFailed;               /* TRUE if exceeded user's limit */
  63. };
  64. class CParsedServiceInfo
  65. {
  66. private:
  67.     CParsedServiceInfo *m_pNext;
  68.     COptionsBase *m_poptCurrent;
  69.     CDynamicOptions *m_poptList;
  70.     LPSTR m_pszCurrent;             /* for parsing routines */
  71.     void SkipWhitespace() { ::SkipWhitespace(&m_pszCurrent); }
  72. public:
  73.     LPCSTR m_pszServiceName;        /* service name URL, may be NULL if not reported */
  74.     LPCSTR m_pszErrorString;        /* points to error string if error reported by site */
  75.     LPCSTR m_pszInvalidString;      /* pointer to invalid or unrecognized string found */
  76.     BOOL m_fInstalled;              /* TRUE if this rating system is installed on this machine */
  77.     CStaticOptions m_opt;
  78.     array<CParsedRating> aRatings;
  79.     CParsedServiceInfo();
  80.     ~CParsedServiceInfo();
  81.     CParsedServiceInfo *Next() { return m_pNext; }
  82.     void Append(CParsedServiceInfo *pNew);
  83.     HRESULT Parse(LPSTR *ppszServiceInfo);
  84.     HRESULT ParseServiceError();
  85.     HRESULT ParseOptions(LPSTR pszTokenEnd, COptionsBase *pOpt,
  86.                      CDynamicOptions **ppOptOut, LPCSTR pszOptionEndToken);
  87.     HRESULT ParseExtension(COptionsBase *pOpt);
  88.     HRESULT ParseExtensionData(COptionsBase *pOpt);
  89.     HRESULT ParseRating();
  90.     HRESULT ParseSingleLabel();
  91.     HRESULT ParseLabels();
  92. };
  93. class CParsedLabelList
  94. {
  95. private:
  96.     LPSTR m_pszList;
  97.     LPSTR m_pszCurrent;
  98.     HRESULT ParseServiceInfo();
  99.     void SkipWhitespace() { ::SkipWhitespace(&m_pszCurrent); }
  100. public:
  101.     CParsedServiceInfo m_ServiceInfo;
  102.     LPCSTR m_pszInvalidString;      /* pointer to invalid or unrecognized string found */
  103.     LPSTR m_pszURL;                 /* copy of URL we were originally given */
  104.     LPSTR m_pszOriginalLabel;      /* copy of original, raw rating label */
  105.     BOOL m_fRated;                      /* TRUE if site is considered rated */
  106.     CParsedLabelList();
  107.     ~CParsedLabelList();
  108.     HRESULT Parse(LPSTR pszCopy);
  109. };
  110. extern "C" {
  111. HRESULT ParseLabelList(LPCSTR pszList, CParsedLabelList **ppParsed);
  112. void FreeParsedLabelList(CParsedLabelList *pList);
  113. };  /* extern "C" */