📄 httpresponsemessage.cpp.bak
字号:
#include "StdAfx.h"
#include "HTTPResponseMessage.h"
#include "StringTool.h"
HTTPResponseMessage::HTTPResponseMessage(void)
{
iBody=NULL;
iStatusDesc=NULL;
}
HTTPResponseMessage::~HTTPResponseMessage(void)
{
delete[] iBody;
delete[] iStatusDesc;
}
void HTTPResponseMessage::Parse( const char* aContent,int length )
{
int posHeader=ParseStatus(aContent,length);
int posBody=ParseHeader(aContent+posHeader,length-posHeader);
ParseBody(aContent+posBody+posHeader,length-posBody-posHeader);
}
int HTTPResponseMessage::Status()
{
return iStatus;
}
int HTTPResponseMessage::ParseStatus(const char* aContent,int length)
{
//解析状态码
int posStatus=StringTool::Find(aContent,' ')+1;
int posDesc=StringTool::Find(aContent,' ',2)+1;
int statusLength=posDesc-posStatus;
//版本
strncpy(iHttpVersion,aContent,posStatus);
iHttpVersion[posStatus]='\0';
//状态码
char* status=new char[statusLength+1];
StringTool::Mid(aContent,status,posStatus,statusLength);
iStatus=StringTool::Str2Num(status);
delete[] status;
//下一行的索引
int posHeader=StringTool::Find(aContent,"\r\n")+2;//2==strlen("\r\n");
//状态描述
int statusDescLength=posHeader-2-posDesc;
delete[] iStatusDesc;
iStatusDesc=new char[statusDescLength+1];
strncpy(iStatusDesc,aContent+posDesc,statusDescLength);
iStatusDesc[statusDescLength]='\0';
return posHeader;
}
int HTTPResponseMessage::ParseHeader( const char* pContent,int length )
{
int lenColon=strlen(": ");
int lenRN=strlen("\r\n");
int pos=0;
int posNextHeader=0;
char ch=pContent[posNextHeader];
while (pos<length && ch!='\r')
{
pContent+=posNextHeader;
posNextHeader=StringTool::Find(pContent,"\r\n")+lenRN;
int posColon=StringTool::Find(pContent,": ");//冒号
//报头名
string name;
name.append(pContent,posColon);
//报头值
int valueLength=posNextHeader-(posColon+lenColon+lenRN);
string value;
value.append(pContent+posColon+lenColon,valueLength);
iHeaderMap.insert(ResponseHeaderPair(name,value));
pos+=posNextHeader;
ch=pContent[posNextHeader];
}
return pos+2;
}
void HTTPResponseMessage::ParseBody( const char* aContent,int length )
{
delete[] iBody;
iBody=new char[length+1];
strncpy(iBody,aContent,length);
iBody[length]='\0';
}
const char* HTTPResponseMessage::Body() const
{
return iBody;
}
const string& HTTPResponseMessage::Header( THTTP aHeader )
{
const char* pHeader=HTTPMessage::GetHeadName(aHeader);
if (pHeader)
{
return iHeaderMap[pHeader];
}
return "";
}
void HTTPResponseMessage::HeaderStr( string& msg )
{
ResponseHeaderIterator it;
for (it = iHeaderMap.begin();
it != iHeaderMap.end();)
{
msg+=(it->first);
msg+=": ";
msg+=(it->second);
it++;
if (it != iHeaderMap.end())
{
msg+="\n";
}
}
}
const char* HTTPResponseMessage::HttpVersion() const
{
return iHttpVersion;
}
const char* HTTPResponseMessage::StatusDesc() const
{
return *iStatusDesc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -