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

📄 html.cpp.svn-base

📁 这是和p2p相关的一份源码
💻 SVN-BASE
字号:
// ------------------------------------------------// File : html.cpp// Date: 4-apr-2002// Author: giles// Desc: //		HTML protocol handling//// (c) 2002 peercast.org// ------------------------------------------------// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// ------------------------------------------------#include <stdarg.h>#include "html.h"#include "http.h"#include "stream.h"#include "gnutella.h"#include "servmgr.h"#include "channel.h"#include "stats.h"// --------------------------------------HTML::HTML(const char *t, Stream &o){	out = &o;	out->writeCRLF = false;	title.set(t);	tagLevel = 0;	refresh = 0;}// --------------------------------------void HTML::writeHandshake(){	out->writeLine(HTTP_SC_OK);	out->writeLine("%s %s",HTTP_HS_SERVER,PCX_AGENT);    out->writeLine("%s %s",HTTP_HS_CONTENT,MIME_HTML);	out->writeLine("%s %s",HTTP_HS_CACHE,"no-cache");	out->writeLine("%s %s",HTTP_HS_CONNECTION,"close");	out->writeLine("");}// --------------------------------------void HTML::writeVariable(const String &varName){	bool r=false;	if (varName.startsWith("servMgr."))		r=servMgr->writeVariable(*out,varName+8);	else if (varName.startsWith("chanMgr."))		r=chanMgr->writeVariable(*out,varName+8);	else if (varName.startsWith("stats."))		r=stats.writeVariable(*out,varName+6);	if (!r)		out->writeString(varName);}// --------------------------------------void HTML::writeTemplate(const char *fileName){	FileStream file;	try	{		file.openReadOnly(fileName);		writeHandshake();		String varName;		Stream &in = file;		bool inEscape=false;		bool isVar=false;		while (!in.eof())		{			char c = in.readChar();			if (c == '{')			{				inEscape = true;				isVar = false;				varName.clear();			}else if (c == '$')			{				if (inEscape)					isVar = true;			}else if (c == '}')			{				if (isVar)					writeVariable(varName.cstr());				inEscape = false;			}else			{				if (inEscape)					varName.append(c);				else					out->writeChar(c);			}		}	}catch(StreamException &e)	{				out->writeString(e.msg);		out->writeString(" : ");		out->writeString(fileName);	}	file.close();}// --------------------------------------void HTML::locateTo(const char *url){	out->writeLine(HTTP_SC_FOUND);	out->writeLine("Location: %s",url);	out->writeLine("");}// --------------------------------------void HTML::startHTML(){	startNode("html");}// --------------------------------------void HTML::startBody(){	startNode("body");}// --------------------------------------void HTML::addHead(){	char buf[512];		startNode("head");			startTagEnd("title",title.cstr());			startTagEnd("meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"");			if (!refreshURL.isEmpty())			{				sprintf(buf,"meta http-equiv=\"refresh\" content=\"%d;URL=%s\"",refresh,refreshURL.cstr());				startTagEnd(buf);			}else if (refresh)			{				sprintf(buf,"meta http-equiv=\"refresh\" content=\"%d\"",refresh);				startTagEnd(buf);			}		end();}// --------------------------------------void HTML::addContent(const char *s){	out->writeString(s);}// --------------------------------------void HTML::startNode(const char *tag, const char *data){	const char *p = tag;	char *o = &currTag[tagLevel][0];	int i;	for(i=0; i<MAX_TAGLEN-1; i++)	{		char c = *p++;		if ((c==0) || (c==' '))			break;		else			*o++ = c;	}	*o = 0;	out->writeString("<");	out->writeString(tag);	out->writeString(">");	if (data)		out->writeString(data);	tagLevel++;	if (tagLevel >= MAX_TAGLEVEL)		throw StreamException("HTML too deep!");}// --------------------------------------void HTML::end(){	tagLevel--;	if (tagLevel < 0)		throw StreamException("HTML premature end!");	out->writeString("</");	out->writeString(&currTag[tagLevel][0]);	out->writeString(">");}// --------------------------------------void HTML::addLink(const char *url, const char *text, bool toblank){	char buf[1024];	sprintf(buf,"a href=\"%s\" %s",url,toblank?"target=\"_blank\"":"");	startNode(buf,text);	end();}// --------------------------------------void HTML::startTag(const char *tag, const char *fmt,...){	if (fmt)	{		va_list ap;  		va_start(ap, fmt);		char tmp[512];		vsprintf(tmp,fmt,ap);		startNode(tag,tmp);	   	va_end(ap);		}else{		startNode(tag,NULL);	}}// --------------------------------------void HTML::startTagEnd(const char *tag, const char *fmt,...){	if (fmt)	{		va_list ap;  		va_start(ap, fmt);		char tmp[512];		vsprintf(tmp,fmt,ap);		startNode(tag,tmp);	   	va_end(ap);		}else{		startNode(tag,NULL);	}	end();}// --------------------------------------void HTML::startSingleTagEnd(const char *fmt,...){	va_list ap;	va_start(ap, fmt);	char tmp[512];	vsprintf(tmp,fmt,ap);	startNode(tmp);	va_end(ap);		end();}// --------------------------------------void HTML::startTableRow(int i){	if (i & 1)		startTag("tr bgcolor=\"#dddddd\" align=\"left\"");	else		startTag("tr bgcolor=\"#eeeeee\" align=\"left\"");}

⌨️ 快捷键说明

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