MCPcopy Create free account
hub / github.com/MonaSolutions/MonaServer / parseHeader

Method parseHeader

MonaCore/sources/HTTP/HTTPPacket.cpp:41–88  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

39}
40
41void HTTPPacket::parseHeader(Exception& ex,const char* key, const char* value) {
42 if (String::ICompare(key,"content-length")==0) {
43 contentLength = String::ToNumber(ex,contentLength, value);
44 } else if (String::ICompare(key,"content-type")==0) {
45 contentType = HTTP::ParseContentType(value, contentSubType);
46 } else if (String::ICompare(key,"connection")==0) {
47 connection = HTTP::ParseConnection(ex,value);
48 } else if (String::ICompare(key,"host")==0) {
49 serverAddress.assign(value);
50 } else if (String::ICompare(key,"origin")==0) {
51 origin.assign(value);
52 } else if (String::ICompare(key,"upgrade")==0) {
53 upgrade.assign(value);
54 } else if (String::ICompare(key,"sec-websocket-key")==0) {
55 secWebsocketKey.assign(value);
56 } else if (String::ICompare(key,"sec-webSocket-accept")==0) {
57 secWebsocketAccept.assign(value);
58 } else if (String::ICompare(key,"if-modified-since")==0) {
59 ifModifiedSince.update(ex,value,Date::HTTP_FORMAT);
60 } else if (String::ICompare(key,"access-control-request-headers")==0) {
61 accessControlRequestHeaders = value;
62 } else if (String::ICompare(key,"access-control-request-method")==0) {
63
64 String::ForEach forEach([this,&ex](UInt32 index,const char* value){
65 accessControlRequestMethod |= HTTP::ParseCommand(ex,value);
66 return true;
67 });
68 String::Split(value, ",", forEach, String::SPLIT_IGNORE_EMPTY | String::SPLIT_TRIM);
69
70 } else if (String::ICompare(key,"cookie")==0) {
71 String::ForEach forEach([this](UInt32 index,const char* data) {
72 const char* value = data;
73 // trim right
74 while (value && *value != '=' && !isblank(*value))
75 ++value;
76 if (value) {
77 const char *endKey=value;
78 // trim left
79 do {
80 ++value;
81 } while (value && (isblank(*value) || *value == '='));
82 SCOPED_STRINGIFY(data, endKey-data, cookies[data] = value);
83 }
84 return true;
85 });
86 String::Split(value, ";", forEach, String::SPLIT_IGNORE_EMPTY | String::SPLIT_TRIM);
87 }
88}
89
90UInt32 HTTPPacket::build(Exception& ex,UInt8* data,UInt32 size) {
91 if (_data)

Callers

nothing calls this directly

Calls 2

isblankFunction · 0.85
updateMethod · 0.45

Tested by

no test coverage detected