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

📄 http.cpp

📁 P2P应用 : Peercast的源代码
💻 CPP
字号:
// ------------------------------------------------// File : http.cpp// Date: 4-apr-2002// Author: giles// Desc: //		HTTP 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 <stdlib.h>#include "http.h"#include "sys.h"#include "common.h"//-----------------------------------------bool HTTP::checkResponse(int r){	if (readResponse()!=r)	{		LOG_ERROR("Unexpected HTTP: %s",cmdLine);		throw StreamException("Unexpected HTTP response");		return false;	}		return true;}//-----------------------------------------void HTTP::readRequest(){	readLine(cmdLine,sizeof(cmdLine));}//-----------------------------------------int HTTP::readResponse(){	readLine(cmdLine,sizeof(cmdLine));	char *cp = cmdLine;	while (*cp)	if (*++cp == ' ') break;	while (*cp) if (*++cp != ' ') break;	char *scp = cp;	while (*cp)	if (*++cp == ' ') break;	*cp = 0;	return atoi(scp);}	//-----------------------------------------bool	HTTP::nextHeader(){	if (readLine(cmdLine,sizeof(cmdLine)))	{		char *ap = strstr(cmdLine,":");		if (ap)			while (*++ap)				if (*ap!=' ')					break;		arg = ap;		return true;	}else	{		arg = NULL;		return false;	}}//-----------------------------------------bool	HTTP::isHeader(const char *hs){	return stristr(cmdLine,hs) != NULL;}//-----------------------------------------bool	HTTP::isRequest(const char *rq){	return strncmp(cmdLine,rq,strlen(rq)) == 0;}//-----------------------------------------char *HTTP::getArgStr(){	return arg;}//-----------------------------------------int	HTTP::getArgInt(){	if (arg) 		return atoi(arg);	else 		return 0;}//-----------------------------------------void HTTP::getAuthUserPass(char *user, char *pass){	if (arg)	{		char *s = stristr(arg,"Basic");		if (s)		{			while (*s)				if (*s++ == ' ')					break;			String str;			str.set(s,String::T_BASE64);			str.convertTo(String::T_ASCII);			s = strstr(str.cstr(),":");			if (s)			{				*s = 0;				if (user)					strcpy(user,str.cstr());				if (pass)					strcpy(pass,s+1);			}					}	}}// -----------------------------------void	CookieList::init(){	for(int i=0; i<MAX_COOKIES; i++)		list[i].clear();	neverExpire = false;}// -----------------------------------bool	CookieList::contains(Cookie &c){	if ((c.id[0]) && (c.ip))		for(int i=0; i<MAX_COOKIES; i++)			if (list[i].compare(c))				return true;	return false;}// -----------------------------------void	Cookie::logDebug(const char *str, int ind){	char ipstr[64];	Host h;	h.ip = ip;	h.IPtoStr(ipstr);	LOG_DEBUG("%s %d: %s - %s",str,ind,ipstr,id);}// -----------------------------------bool	CookieList::add(Cookie &c){	if (contains(c))		return false;	unsigned int oldestTime=(unsigned int)-1; 	int oldestIndex=0;	for(int i=0; i<MAX_COOKIES; i++)		if (list[i].time <= oldestTime)		{			oldestIndex = i;			oldestTime = list[i].time;		}	c.logDebug("Added cookie",oldestIndex);	c.time = sys->getTime();	list[oldestIndex]=c;	return true;}// -----------------------------------void	CookieList::remove(Cookie &c){	for(int i=0; i<MAX_COOKIES; i++)		if (list[i].compare(c))			list[i].clear();}

⌨️ 快捷键说明

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