/* Web Polygraph       http://www.web-polygraph.org/
 * (C) 2003-2006 The Measurement Factory
 * Licensed under the Apache License, Version 2.0 */

#ifndef POLYGRAPH__PGL_ROBOTSYM_H
#define POLYGRAPH__PGL_ROBOTSYM_H

#include "xstd/Array.h"
#include "pgl/AgentSym.h"

class String;
class RndDistr;
class SessionSym;
class AclSym;
class DnsResolverSym;


// server side configuration
class RobotSym: public AgentSym {
	public:
		static const String TheType;

	public:
		RobotSym();
		RobotSym(const String &aType, PglRec *aRec);

		virtual bool isA(const String &type) const;

		bool reqInterArrival(RndDistr *&iad) const;
		bool recurRatio(double &ratio) const;
		bool embedRecurRatio(double &ratio) const;
		bool uniqueUrls(bool &set) const;
		bool openConnLimit(int &lmt) const;
		bool waitXactLimit(int &lmt) const;
		bool minimizeNewConn(double &prob) const;
		bool authError(double &prob) const;
		SessionSym *session() const;
		bool icpPort(int &port) const;
		NetAddr peerHttp() const;
		NetAddr peerIcp() const;
		AclSym *acl() const;
		DnsResolverSym *dnsResolver() const;
		bool privCache(int &capacity) const;
		bool proxies(Array<NetAddr*> &addrs) const;
		bool origins(Array<NetAddr*> &addrs) const;
		bool origins(Array<NetAddr*> &addrs, RndDistr *&sel) const;
		bool credentials(Array<String*> &creds) const;
		bool containerTags(Array<String*> &tags) const;
		bool acceptedContentCodings(Array<String*> &codings) const;
		bool interests(Array<StringSym*> &istrs, Array<double> &iprobs) const;
		RndDistr *interests(const StrIdentifier &interestKinds) const;
		RndDistr *reqMethods(const StrIdentifier &reqMethodNames) const;
		RndDistr *pipelineDepth() const;
		String foreignTrace() const;
		String rawUriThrower() const;
		RndDistr *cookiesKeepLimit() const;

	protected:
		virtual SynSym *dupe(const String &dType) const;
		virtual String msgTypesField() const;
		bool reqRate(double &rate) const;
};

#endif


syntax highlighted by Code2HTML, v. 0.9.1