Files
Work/wininet/HTTPHeader.cpp
2024-08-07 09:16:27 -04:00

64 lines
2.2 KiB
C++

#include <wininet/HTTPHeader.hpp>
void HTTPHeader::parseHeader(Block<String> &headerLines)
{
for(int index=0;index<headerLines.size();index++)
{
const String &headerLine=headerLines[index];
const String strToken=headerLine.betweenString(0,':');
if(!index)mResponseCode=headerLine.betweenString(' ',' ').toInt();
if(strToken=="Date")mDate=headerLine.betweenString(' ',0);
else if(strToken=="Server")mServer=headerLine.betweenString(' ',0);
else if(strToken=="Last-Modified")mLastModified=headerLine.betweenString(' ',0);
else if(strToken=="ETag")mETag=headerLine.betweenString(' ',0);
else if(strToken=="Accept-Ranges")mAcceptRanges=headerLine.betweenString(' ',0);
else if(strToken=="Content-Length")mContentLength=headerLine.betweenString(' ',0).toInt();
else if(strToken=="Content-Type")mContentType=headerLine.betweenString(' ',0);
else if(strToken=="Accept")mAccept=headerLine.betweenString(' ',0);
}
}
void HTTPHeader::parseHeader(const String &headerLines)
{
Block<String> blkHeaderLines;
createHeaderLines(headerLines,blkHeaderLines);
*this=blkHeaderLines;
}
void HTTPHeader::createHeaderLines(String strHeaders,Block<String> &headerLines)
{
char *strPtr=0;
headerLines.remove();
if(strHeaders.isNull())return;
strPtr=strHeaders.str();
strPtr=::strtok(strPtr,"\n\0");
while(true)
{
if(!strPtr)break;
String str=strPtr;
str.removeTokens("\r\n");
headerLines.insert(&str);
strPtr=::strtok(0,"\n\0");
}
}
String HTTPHeader::serialize(void)
{
String strHeader;
String crlf="\r\n";
if(!mDate.isNull())strHeader+=String("Date: ")+mDate+crlf;
if(!mServer.isNull())strHeader+=String("Server: ")+mServer+crlf;
if(!mLastModified.isNull())strHeader+=String("Last-Modified: ")+mLastModified+crlf;
if(!mETag.isNull())strHeader+=String("ETag: ")+mETag+crlf;
if(!mAcceptRanges.isNull())strHeader+=String("Accept-Ranges: ")+mAcceptRanges+crlf;
if(0!=mContentLength)strHeader+=String("Content-Length :")+String().fromInt(mContentLength)+crlf;
if(!mContentType.isNull())strHeader+=String("Content-Type: ")+mContentType+crlf;
return strHeader;
}
String HTTPHeader::getApplicationExtension(void)const
{
return String(".")+mContentType.betweenString('/',0);
}