/* Web Polygraph http://www.web-polygraph.org/ * (C) 2003-2006 The Measurement Factory * Licensed under the Apache License, Version 2.0 */ #ifndef POLYGRAPH__CLIENT_CLTCFG_H #define POLYGRAPH__CLIENT_CLTCFG_H #include "xstd/Ring.h" #include "runtime/AgentCfg.h" #include "client/MembershipMap.h" #include "client/AclGroup.h" class Goal; class ObjId; class RndDistr; class PopModel; class RepHdr; class RobotSym; class WarmupPlan; class XactAbortCoord; class RegExGroup; class ForeignWorld; class XmlTagIdentifier; // Client configuration items that can be shared among multiple clients class CltCfg: public AgentCfg { public: CltCfg(); ~CltCfg(); void configure(const RobotSym *aRobot); int viservLimit() const; bool hasViserv(int viserv) const; void startWarmup(); void stopWarmup(); int selectInterest(); int selectViserv(); bool selectProxy(NetAddr &addr); bool selectCredentials(String &newName); void selectAbortCoord(XactAbortCoord &coord); int selectCookieCount(const ObjId &id); Size selectCookieSize(const ObjId &id); bool followAllUris(const RepHdr &rep) const; int findMemberships(const String &user, Memberships &memberships) const; const AclGroup &acl() const { return theAcl; } ForeignWorld *foreignWorld() { return theForeignWorld; } protected: void configureInterests(); void configureReqTypes(); void configureReqMethods(); void configureOrigins(); void configureProxies(); void configureCredentials(); void configureMemberships(); void configureContainerTags(); void configureAcceptedContentCodings(); void configurePipeDepth(); void configureTrace(const String &fname); void addOrigName(const NetAddr &oname); void checkTargets(int viserv); protected: static Memberships TheGlbMemberships; public: const RobotSym *theRobot; // used to identify/share configs Array theViservs; // origin idx to HostMap idx (viserv) RndDistr *theOriginSel; // selects origin idx RndDistr *theInterestSel; // selects interest groups RndDistr *theReqTypeSel; // selects request types RndDistr *theReqMethodSel; // selects request methods PopModel *thePopModel; // popularity model to select old oids Goal *theBusyPeriod; // sessions's busy period config RndDistr *theIdlePeriodDur;// sessions's idle period config Time theSessionHeartbitGap;// hearbit interval Ring theProxies; int theProxyCycleCnt; // to randomize proxy selection RndDistr *thePipelineDepth;// maximum concurrent pipelined requests NetAddr thePeerHttp; // caching peer talking HTTP NetAddr thePeerIcp; // caching peer talking ICP double thePublicRatio; // how often to request a "public" object double theRecurRatio; // how often to re-visit an old object double theEmbedRecurRatio; // how often to re-visit an old embedded obj double theAbortProb; // prob of aborting a transaction double theAuthError; // prob of an authentication error int theWaitXactLmt; // limit on the number of postponed requests int theIcpPort; // IPC client should use this port Memberships theLclMemberships; // all user groups users belong to Ring theCredentials; // all users under this cfg int theCredentialCycleCnt; AclGroup theAcl; String theUriThrower; // follow all URIs from this server ForeignWorld *theForeignWorld; // foreign URLs trace, if any XmlTagIdentifier *theContainerTags; String *theAcceptedContentCodings; // for Accept-Encoding header bool acceptingGzipContent; // pre-parsed status RndDistr *theCookiesKeepLimitSel; // how many cookies to keep WarmupPlan *theWarmupPlan; bool genUniqUrls; // each generated URL must be unique bool didWarmup; // warmup plan was completed }; class CltSharedCfgs: protected Array { public: CltCfg *getConfig(const RobotSym *cfg); protected: CltCfg *addConfig(const RobotSym *cfg); }; #endif