MCPcopy Create free account
hub / github.com/awawa-dev/HyperHDR / onClientDataReceived

Method onClientDataReceived

sources/webserver/QtHttpClientWrapper.cpp:80–282  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

78}
79
80void QtHttpClientWrapper::onClientDataReceived(void)
81{
82 if (m_sockClient != Q_NULLPTR)
83 {
84 while (m_sockClient->bytesAvailable())
85 {
86 QByteArray line = m_sockClient->readLine();
87
88 switch (m_parsingStatus) // handle parsing steps
89 {
90 case AwaitingRequest: // "command url version" × 1
91 {
92 QString str = QString::fromUtf8(line).trimmed();
93 QStringList parts = str.split(SPACE, Qt::SkipEmptyParts);
94 if (parts.size() == 3)
95 {
96 QString command = parts.at(0);
97 QString url = parts.at(1);
98 QString version = parts.at(2);
99
100 if (version == QtHttpServer::HTTP_VERSION)
101 {
102 m_currentRequest = new QtHttpRequest(this, m_serverHandle);
103 m_currentRequest->setClientInfo(m_sockClient->localAddress(), m_sockClient->peerAddress());
104 m_currentRequest->setUrl(QUrl(url));
105 m_currentRequest->setCommand(command);
106 m_parsingStatus = AwaitingHeaders;
107 }
108 else
109 {
110 m_parsingStatus = ParsingError;
111 //qWarning () << "Error : unhandled HTTP version :" << version;
112 }
113 }
114 else
115 {
116 m_parsingStatus = ParsingError;
117 //qWarning () << "Error : incorrect HTTP command line :" << line;
118 }
119
120 break;
121 }
122 case AwaitingHeaders: // "header: value" × N (until empty line)
123 {
124 QByteArray raw = line.trimmed();
125
126 if (!raw.isEmpty()) // parse headers
127 {
128 int pos = raw.indexOf(COLON);
129
130 if (pos > 0)
131 {
132 QByteArray header = raw.left(pos).trimmed();
133 QByteArray value = raw.mid(pos + 1).trimmed();
134 m_currentRequest->addHeader(header, value);
135 if (header == QtHttpHeader::ContentLength)
136 {
137 bool ok = false;

Callers

nothing calls this directly

Calls 15

setClientInfoMethod · 0.80
setUrlMethod · 0.80
setCommandMethod · 0.80
isEmptyMethod · 0.80
setPostDataMethod · 0.80
setStatusCodeMethod · 0.80
sizeMethod · 0.45
addHeaderMethod · 0.45
getHeaderMethod · 0.45
appendRawDataMethod · 0.45
getRawDataSizeMethod · 0.45
getUrlMethod · 0.45

Tested by

no test coverage detected