⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webtraf.h

📁 柯老师网站上找到的
💻 H
字号:
/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- *///// Copyright (c) 1999 by the University of Southern California// All rights reserved.//// Permission to use, copy, modify, and distribute this software and its// documentation in source and binary forms for non-commercial purposes// and without fee is hereby granted, provided that the above copyright// notice appear in all copies and that both the copyright notice and// this permission notice appear in supporting documentation. and that// any documentation, advertising materials, and other materials related// to such distribution and use acknowledge that the software was// developed by the University of Southern California, Information// Sciences Institute.  The name of the University may not be used to// endorse or promote products derived from this software without// specific prior written permission.//// THE UNIVERSITY OF SOUTHERN CALIFORNIA makes no representations about// the suitability of this software for any purpose.  THIS SOFTWARE IS// PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,// INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// Other copyrights might apply to parts of this software and are so// noted when applicable.//// Incorporating Polly's web traffic module into the PagePool framework//// XXX This has nothing to do with the HttpApp classes. Because we are // only interested in traffic pattern here, we do not want to be bothered // with the burden of transmitting HTTP headers, etc. //// $Header: /nfs/jade/vint/CVSROOT/ns-2/webcache/webtraf.h,v 1.5 2000/04/12 17:09:19 haoboy Exp $#ifndef ns_webtraf_h#define ns_webtraf_h#include "ranvar.h"#include "random.h"#include "timer-handler.h"#include "list.h"#include "node.h"#include "tcp.h"#include "tcp-sink.h"#include "pagepool.h"const int WEBTRAF_DEFAULT_OBJ_PER_PAGE = 1;class WebTrafPool;class WebTrafSession : public TimerHandler {public: 	WebTrafSession(WebTrafPool *mgr, Node *src, int np, int id) : 		rvInterPage_(NULL), rvPageSize_(NULL),		rvInterObj_(NULL), rvObjSize_(NULL), 		mgr_(mgr), src_(src), nPage_(np), curPage_(0), donePage_(0),		id_(id) {}	virtual ~WebTrafSession();	// Queried by individual pages/objects	inline RandomVariable*& interPage() { return rvInterPage_; }	inline RandomVariable*& pageSize() { return rvPageSize_; }	inline RandomVariable*& interObj() { return rvInterObj_; }	inline RandomVariable*& objSize() { return rvObjSize_; }	void donePage(void* ClntData);	void launchReq(void* ClntData, int obj, int size);	inline int id() const { return id_; }	static int LASTPAGE_;private:	virtual void expire(Event *e = 0);	virtual void handle(Event *e);	RandomVariable *rvInterPage_, *rvPageSize_, *rvInterObj_, *rvObjSize_;	WebTrafPool* mgr_;	Node* src_;		// One source/server per session	int nPage_, curPage_, donePage_;	int id_;};class WebTrafPool : public PagePool {public: 	WebTrafPool(); 	virtual ~WebTrafPool(); 	inline Node* picksrc() {		int n = int(floor(Random::uniform(0, nClient_)));		assert((n >= 0) && (n < nClient_));		return client_[n];	}	inline Node* pickdst() {		int n = int(floor(Random::uniform(0, nSrc_)));		assert((n >= 0) && (n < nSrc_));		return server_[n];	}	inline void doneSession(int idx) { 		assert((idx>=0) && (idx<nSession_) && (session_[idx]!=NULL));#if 0		fprintf(stderr, "deleted session %d", idx);#endif		delete session_[idx];		session_[idx] = NULL; 	}	TcpAgent* picktcp();	TcpSink* picksink();	inline int nTcp() { return nTcp_; }	inline int nSink() { return nSink_; }protected:	virtual int command(int argc, const char*const* argv);	// Session management: fixed number of sessions, fixed number	// of pages per session	int nSession_;	WebTrafSession** session_; 	int nSrc_;	Node** server_;		/* Web servers */	int nClient_;	Node** client_; 	/* Browsers */	// TCP agent pool management	struct AgentListElem {		AgentListElem(Agent* a) : agt_(a) {			link.le_next = NULL;			link.le_prev = NULL;		}		Agent* agt_;		LIST_ENTRY(AgentListElem) link;	};	LIST_HEAD(AgentList, AgentListElem);	inline void insertAgent(AgentList* l, Agent *a) {		AgentListElem *e = new AgentListElem(a);		LIST_INSERT_HEAD(l, e, link);	}	inline Agent* detachHead(AgentList* l) {		AgentListElem *e = l->lh_first;		if (e == NULL)			return NULL;		Agent *a = e->agt_;		LIST_REMOVE(e, link);		delete e;		return a;	}	int nTcp_, nSink_;	AgentList tcpPool_;	/* TCP agent pool */	AgentList sinkPool_;	/* TCP sink pool */	// Helper methods	inline int lookup_rv(RandomVariable*& rv, const char* name) {		if (rv != NULL)			Tcl::instance().evalf("delete %s", rv->name());		rv = (RandomVariable*)lookup_obj(name);		return rv ? (TCL_OK) : (TCL_ERROR);	}};#endif // ns_webtraf_h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -