SBinetValidator.h
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:4k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. #ifndef __SBVALIDATOR_H_                   /* Allows multiple inclusions */
  23. #define __SBVALIDATOR_H_
  24. #include <time.h>    // For time( )
  25. #include "VXIinet.h"          // For VXIinetResult
  26. #include "SWIutilLogger.hpp"   // Base class
  27. #include "SBinetString.hpp"   // For SBinetString
  28. #define VALIDATOR_MIME_TYPE L"application/x-vxi-SBinet-validator"
  29. class SBinetValidator : protected SWIutilLogger
  30. {
  31. public:
  32.   SBinetValidator(VXIlogInterface *log, VXIunsigned diagTagBase);
  33.   virtual ~SBinetValidator();
  34.   // Creation
  35.   VXIinetResult Create(const VXIchar *url, time_t requestTime, const VXIMap *streamInfo);
  36.   VXIinetResult Create(const VXIchar *url, VXIulong sizeBytes,
  37.                        time_t requestTime, const VXIMap *streamInfo);
  38.   VXIinetResult Create(const VXIchar *filename, VXIulong sizeBytes, time_t refTime);
  39.   VXIinetResult Create(const VXIValue *value);
  40.   VXIinetResult Create(const VXIbyte *content, VXIulong contentSize);
  41.   // Serialization
  42.   VXIContent *serialize() const;
  43.   bool serialize(VXIbyte *&content, VXIulong& contentSize) const;
  44.   // Determine if it is expired or modified
  45.   bool isExpired() const;
  46.   bool isModified(time_t lastModified, VXIulong sizeBytes) const
  47.   {
  48.     return (lastModified != _lastModified) || (sizeBytes != _sizeBytes);
  49.   }
  50.   bool isExpired(const VXIint maxAge, const VXIint maxStale) const;
  51.   time_t getLastModified() const
  52.   {
  53.     return _lastModified;
  54.   }
  55.   bool getMustRevalidateF() const
  56.   {
  57.     return _mustRevalidateF;
  58.   }
  59.   time_t getRefTime() const
  60.   {
  61.     return _refTime;
  62.   }
  63.   time_t getExpiresTime() const;
  64.   time_t getCurrentAge() const
  65.   {
  66.     return time(NULL) - _refTime;
  67.   }
  68.   time_t getFreshnessLifetime() const
  69.   {
  70.     return _freshnessLifetime;
  71.   }
  72.   VXIulong getSize() const
  73.   {
  74.     return _sizeBytes;
  75.   }
  76.   const VXIchar *getETAG() const
  77.   {
  78.     return _eTag;
  79.   }
  80.   bool isStrong() const;
  81.   const VXIchar *getURL() const
  82.   {
  83.     return _url;
  84.   }
  85.   bool propagateDataFrom(const SBinetValidator& validator);
  86.   bool operator==(const SBinetValidator& validator);
  87.   void Clear();
  88.  private:
  89.   // Log the validator to the diagnostic log
  90.   void Log(const VXIchar *name) const;
  91.   // VXIContent destructor
  92.   static void ContentDestroy(VXIbyte **content, void *userData);
  93.  private:
  94.   time_t checkPragma();
  95.   time_t checkCacheControl();
  96.   void computeFreshnessLifetime();
  97.   VXIchar *_url;
  98.   VXIulong _sizeBytes;
  99.   time_t _dateTime;
  100.   time_t _expiresTime;
  101.   time_t _lastModified;
  102.   VXIchar *_eTag;
  103.   bool _mustRevalidateF;
  104.   VXIchar *_pragmaDirective;
  105.   VXIchar *_cacheControlDirective;
  106.   time_t _refTime;
  107.   time_t _freshnessLifetime;
  108. };
  109. #endif // include guard