/* Web Polygraph http://www.web-polygraph.org/ * (C) 2003-2006 The Measurement Factory * Licensed under the Apache License, Version 2.0 */ #ifndef POLYGRAPH__CSM_CONTENTCFG_H #define POLYGRAPH__CSM_CONTENTCFG_H #include "xstd/String.h" #include "xstd/Array.h" class ObjId; class RndDistr; class BodyIter; class ContentDbase; class TextDbase; class ContentSym; class EmbedContMdl; class ObjTimes; class ObjLifeCycle; class InjectIter; class IOBuf; class ReqHdr; class ContentCfg { public: typedef Array Strings; public: ContentCfg(int anId); ~ContentCfg(); void configure(const ContentSym &cfg); int id() const { return theId; } const String &kind() const { return theKind; } double newPerOid() const { return theNewPerOid; } const String &url_ext(int seed) const; const String &url_pfx(int seed) const; double repSizeMean() const; bool hasEmbedCont() const { return theEmbedCont != 0; } bool multipleContentCodings() const; void calcTimes(const ObjId &oid, ObjTimes ×) const; bool calcContentCoding(ObjId &oid, const ReqHdr &req) const; Size calcRawRepSize(const ObjId &oid) const; bool calcCachability(const ObjId &oid) const; bool calcChecksumNeed(const ObjId &oid) const; Size pourContentPrefix(const ObjId &oid, IOBuf &buf) const; double compContPerCall(const ContentCfg *cc) const; void noteNewContProb(ContentCfg *cc, double newProb); void newPerOid(double aNewPerOid); BodyIter *getBodyIter(const ObjId &oid); void putBodyIter(BodyIter *i) const; void putInjector(InjectIter *i) const; protected: void configureEncodings(const ContentSym &cfg); int selectCdbStart(const ObjId &oid) const; const String &pickStr(const Strings &strings, RndDistr *sel, int seed) const; BodyIter *wrapBodyIter(BodyIter *prime); Size calcContentPrefixSize(const ObjId &oid) const; Size pourUniqueContentPrefix(const ObjId &oid, IOBuf &buf) const; int contentUniqueness(const ObjId &oid) const; int contentHash(const ObjId &oid) const; public: String theKind; String theMimeType; ObjLifeCycle *theObjLifeCycle; double theChbRatio; double theChecksumRatio; double theUniqueRatio; protected: RndDistr *theSize; // null if must use cdb entry sizes EmbedContMdl *theEmbedCont; ContentDbase *theCdb; TextDbase *theTdb; RndDistr *theInjGap; // distance between injections double theInfProb; // portion of infected files Strings theExtensions; // file extensions mutable RndDistr *theExtSel; // selector for the above Strings thePrefixes; // URL path prefixes mutable RndDistr *thePfxSel; // selector for the above double theNewPerOid; // new content oids per direct access oid int theId; String theCommonPrefix; int *theEncodings; // content-encodings enum ContentUniqueness { cuChance = 0, cuUnique, cuCommon }; }; #endif