Skip to content

Commit cf6d66e

Browse files
committed
Fixed minor bugs
1 parent 4f05de9 commit cf6d66e

18 files changed

+343
-159
lines changed

apps.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
server {
22
listen 2280;
33
server_name servertest www.servertest;
4-
server_module /media/projects/sites/servertest/module/servertest_release.so;
4+
server_module /media/projects/sites/servertest/module/appgameserver_debug.so;
55
server_module_update /media/projects/httpserverapp/httpserverapp/bin/Release/libhttpserverapp.so;
66
root_dir /media/projects/sites/servertest/www/;
77
request_max_size 10485760;

httpserver.pro

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,15 @@ CONFIG -= qt
55

66
DEFINES += POSIX
77

8+
CONFIG(debug, debug|release):DEFINES += DEBUG
9+
810
QMAKE_CXXFLAGS += -std=c++11
911

12+
QMAKE_CFLAGS_RELEASE -= -O
13+
QMAKE_CFLAGS_RELEASE -= -O1
14+
QMAKE_CFLAGS_RELEASE -= -O2
15+
QMAKE_CFLAGS_RELEASE *= -O3
16+
1017
LIBS += -ldl -pthread
1118

1219
SOURCES += \

httpserver.pro.user

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE QtCreatorProject>
3-
<!-- Written by QtCreator 3.2.1, 2014-11-22T02:42:48. -->
3+
<!-- Written by QtCreator 3.2.2, 2015-03-18T00:10:36. -->
44
<qtcreator>
55
<data>
66
<variable>EnvironmentId</variable>
7-
<value type="QByteArray">{9920746f-9985-46af-bb9c-6023d18266c8}</value>
7+
<value type="QByteArray">{1b4c0b3e-5aa0-412f-8f7e-3a13c2b330b9}</value>
88
</data>
99
<data>
1010
<variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -60,8 +60,8 @@
6060
<valuemap type="QVariantMap">
6161
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
6262
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
63-
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{fb1b1040-2620-42ea-a3ce-627c9d29cc16}</value>
64-
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
63+
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{c77ee4a2-1c2a-4bac-9185-8378ec4ebf5d}</value>
64+
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
6565
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
6666
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
6767
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
@@ -235,7 +235,7 @@
235235
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
236236
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
237237
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">httpserver</value>
238-
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">httpserver2</value>
238+
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
239239
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/media/projects/httpserver/httpserver.pro</value>
240240
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments">--start</value>
241241
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">httpserver.pro</value>

httpserver/DataVariantAbstract.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace HttpServer
2727
/**
2828
* @param const Socket & - сокет, откуда можно достать остальные данные
2929
* @param const std::chrono::milliseconds & - максимальное время ожидания данных (на сокете)
30-
* @param const std::string & - первая часть полученных данных
30+
* @param std::string & - первая часть полученных данных
3131
* @param const size_t - сколько осталось данных (в байтах) получить из сокета
3232
* @param const std::unordered_map<std::string, std::string> & - дополнительные параметры, описывающие формат данных
3333
* @param std::unordered_multimap<std::string, std::string> & - данные в виде ключ->значение
@@ -39,7 +39,7 @@ namespace HttpServer
3939
(
4040
const Socket &,
4141
const std::chrono::milliseconds &,
42-
const std::string &,
42+
std::string &,
4343
const size_t,
4444
const std::unordered_map<std::string, std::string> &,
4545
std::unordered_multimap<std::string, std::string> &,

httpserver/DataVariantFormUrlencoded.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace HttpServer
1414
(
1515
const Socket &sock,
1616
const std::chrono::milliseconds &timeout,
17-
const std::string &str,
17+
std::string &str,
1818
const size_t leftBytes,
1919
const std::unordered_map<std::string, std::string> &params,
2020
std::unordered_multimap<std::string, std::string> &data,
@@ -54,6 +54,8 @@ namespace HttpServer
5454
}
5555
}
5656

57+
str.clear();
58+
5759
return true;
5860
}
5961

httpserver/DataVariantFormUrlencoded.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace HttpServer
1414
(
1515
const Socket &,
1616
const std::chrono::milliseconds &,
17-
const std::string &,
17+
std::string &,
1818
const size_t,
1919
const std::unordered_map<std::string, std::string> &,
2020
std::unordered_multimap<std::string, std::string> &,

httpserver/DataVariantMultipartFormData.cpp

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ namespace HttpServer
5757
(
5858
const Socket &sock,
5959
const std::chrono::milliseconds &timeout,
60-
const std::string &str,
60+
std::string &str,
6161
const size_t leftBytes,
6262
const std::unordered_map<std::string, std::string> &params,
6363
std::unordered_multimap<std::string, std::string> &data,
@@ -82,26 +82,25 @@ namespace HttpServer
8282

8383
// Создание буферов
8484
std::vector<std::string::value_type> buf(buf_len);
85-
std::string str_buf = str;
8685

8786
size_t str_cur; // Текущая позиция в буфере
8887

8988
size_t recv_len; // Прочитано байт при последнем извлечении данных из сокета
9089
size_t read_len = 0; // Прочитано байт из сокета всего
9190

9291
// Поиск разделителя блока данных
93-
str_cur = str_buf.find(block_delimiter);
92+
str_cur = str.find(block_delimiter);
9493

9594
if (std::string::npos == str_cur)
9695
{
9796
// Получить следующий кусок данных
98-
if (false == append(sock, timeout, buf, str_buf, data_end, leftBytes, recv_len, read_len) )
97+
if (false == append(sock, timeout, buf, str, data_end, leftBytes, recv_len, read_len) )
9998
{
10099
return false;
101100
}
102101

103102
// Поиск разделителя блока данных
104-
str_cur = str_buf.find(block_delimiter);
103+
str_cur = str.find(block_delimiter);
105104

106105
if (std::string::npos == str_cur)
107106
{
@@ -122,19 +121,19 @@ namespace HttpServer
122121
bool is_block_valid = true;
123122

124123
// Поиск конца заголовков блока данных
125-
size_t headers_end = str_buf.find("\r\n\r\n", str_cur);
124+
size_t headers_end = str.find("\r\n\r\n", str_cur);
126125

127126
// Если конец не был найден, то
128127
if (std::string::npos == headers_end)
129128
{
130129
// Получить следующий кусок данных
131-
if (false == append(sock, timeout, buf, str_buf, data_end, leftBytes, recv_len, read_len) )
130+
if (false == append(sock, timeout, buf, str, data_end, leftBytes, recv_len, read_len) )
132131
{
133132
return false;
134133
}
135134

136135
// Провести повторный поиск
137-
headers_end = str_buf.find("\r\n\r\n", str_cur);
136+
headers_end = str.find("\r\n\r\n", str_cur);
138137

139138
// Если снова не найдено, то данные некорректны
140139
if (std::string::npos == headers_end)
@@ -148,24 +147,24 @@ namespace HttpServer
148147
// Разобрать заголовки блока данных
149148
std::unordered_map<std::string, std::string> headers;
150149

151-
for (size_t line_end = str_buf.find("\r\n", str_cur); str_cur < headers_end; line_end = str_buf.find("\r\n", str_cur) )
150+
for (size_t line_end = str.find("\r\n", str_cur); str_cur < headers_end; line_end = str.find("\r\n", str_cur) )
152151
{
153-
size_t delimiter = str_buf.find(':', str_cur);
152+
size_t delimiter = str.find(':', str_cur);
154153

155154
if (std::string::npos == delimiter || delimiter > line_end)
156155
{
157-
std::string header_name = str_buf.substr(str_cur, line_end - str_cur);
156+
std::string header_name = str.substr(str_cur, line_end - str_cur);
158157
Utils::trim(header_name);
159158
headers.emplace(std::move(header_name), "");
160159
}
161160
else
162161
{
163-
std::string header_name = str_buf.substr(str_cur, delimiter - str_cur);
162+
std::string header_name = str.substr(str_cur, delimiter - str_cur);
164163
Utils::trim(header_name);
165164

166165
++delimiter;
167166

168-
std::string header_value = str_buf.substr(delimiter, line_end - delimiter);
167+
std::string header_value = str.substr(delimiter, line_end - delimiter);
169168
Utils::trim(header_value);
170169

171170
headers.emplace(std::move(header_name), std::move(header_value) );
@@ -271,39 +270,41 @@ namespace HttpServer
271270
if (file.is_open() )
272271
{
273272
// Смещение данных в буфере в начало
274-
str_buf.assign(str_buf.cbegin() + str_cur, str_buf.cend() );
273+
// str.assign(str.cbegin() + str_cur, str.cend() );
274+
str.erase(str.begin(), str.begin() + str_cur);
275275

276276
// Поиск конца блока данных
277-
size_t delimiter = str_buf.find(block_delimiter);
277+
size_t delimiter = str.find(block_delimiter);
278278

279279
// Пока конец блока данных не найден
280280
while (std::string::npos == delimiter)
281281
{
282282
// Добавить данные к значению
283-
file.write(str_buf.data(), str_buf.length() - data_end.length() );
283+
file.write(str.data(), str.length() - data_end.length() );
284284

285-
str_buf.assign(str_buf.cend() - data_end.length(), str_buf.cend() );
285+
// str.assign(str.cend() - data_end.length(), str.cend() );
286+
str.erase(str.begin(), str.end() - data_end.length() );
286287

287288
// Получить следующий кусок данных
288-
if (false == append(sock, timeout, buf, str_buf, data_end, leftBytes, recv_len, read_len) )
289+
if (false == append(sock, timeout, buf, str, data_end, leftBytes, recv_len, read_len) )
289290
{
290291
return false;
291292
}
292293

293294
// Поиск конца блока данных
294-
delimiter = str_buf.find(block_delimiter);
295+
delimiter = str.find(block_delimiter);
295296
}
296297

297298
// Добавить последнюю часть данных к значению
298-
file.write(str_buf.data(), delimiter);
299+
file.write(str.data(), delimiter);
299300

300301
// Добавить данные в список
301302
files.emplace(it_name->second, FileIncoming(std::move(tmp_name), it_filetype->second, file.tellp() ) );
302303

303304
file.close();
304305

305306
// Если найден конец данных
306-
if (str_buf.find(data_end, delimiter) == delimiter)
307+
if (str.find(data_end, delimiter) == delimiter)
307308
{
308309
is_find_data_end = true;
309310
}
@@ -325,37 +326,39 @@ namespace HttpServer
325326
std::string value;
326327

327328
// Смещение данных в буфере в начало
328-
str_buf.assign(str_buf.cbegin() + str_cur, str_buf.cend() );
329+
// str.assign(str.cbegin() + str_cur, str.cend() );
330+
str.erase(str.begin(), str.begin() + str_cur);
329331

330332
// Поиск конца блока данных
331-
size_t delimiter = str_buf.find(block_delimiter);
333+
size_t delimiter = str.find(block_delimiter);
332334

333335
// Пока конец блока данных не найден
334336
while (std::string::npos == delimiter)
335337
{
336338
// Добавить данные к значению
337-
value.append(str_buf.cbegin(), str_buf.cend() - data_end.length() );
339+
value.append(str.cbegin(), str.cend() - data_end.length() );
338340

339-
str_buf.assign(str_buf.cend() - data_end.length(), str_buf.cend() );
341+
// str.assign(str.cend() - data_end.length(), str.cend() );
342+
str.erase(str.begin(), str.end() - data_end.length() );
340343

341344
// Получить следующий кусок данных
342-
if (false == append(sock, timeout, buf, str_buf, data_end, leftBytes, recv_len, read_len) )
345+
if (false == append(sock, timeout, buf, str, data_end, leftBytes, recv_len, read_len) )
343346
{
344347
return false;
345348
}
346349

347350
// Поиск конца блока данных
348-
delimiter = str_buf.find(block_delimiter);
351+
delimiter = str.find(block_delimiter);
349352
}
350353

351354
// Добавить последнюю часть данных к значению
352-
value.append(str_buf.cbegin(), str_buf.cbegin() + delimiter);
355+
value.append(str.cbegin(), str.cbegin() + delimiter);
353356

354357
// Добавить данные в список
355358
data.emplace(it_name->second, std::move(value) );
356359

357360
// Если найден конец данных
358-
if (str_buf.find(data_end, delimiter) == delimiter)
361+
if (str.find(data_end, delimiter) == delimiter)
359362
{
360363
is_find_data_end = true;
361364
}
@@ -383,29 +386,34 @@ namespace HttpServer
383386
if (false == is_block_valid)
384387
{
385388
// то блок данных пропускаем (ищем следующий блок)
386-
str_cur = str_buf.find(block_delimiter, str_cur);
389+
str_cur = str.find(block_delimiter, str_cur);
387390

388391
while (std::string::npos == str_cur)
389392
{
390-
str_buf.assign(str_buf.cend() - data_end.length(), str_buf.cend() );
393+
// str.assign(str.cend() - data_end.length(), str.cend() );
394+
str.erase(str.begin(), str.end() - data_end.length() );
391395

392396
// Получить следующий кусок данных
393-
if (false == append(sock, timeout, buf, str_buf, data_end, leftBytes, recv_len, read_len) )
397+
if (false == append(sock, timeout, buf, str, data_end, leftBytes, recv_len, read_len) )
394398
{
395399
return false;
396400
}
397401

398-
str_cur = str_buf.find(block_delimiter);
402+
str_cur = str.find(block_delimiter);
399403
}
400404

401405
// Если найден конец данных
402-
if (str_buf.find(data_end, str_cur) == str_cur)
406+
if (str.find(data_end, str_cur) == str_cur)
403407
{
404408
is_find_data_end = true;
405409
}
406410

407411
str_cur += block_delimiter.length() + 2;
408412
}
413+
414+
str.erase(str.begin(), str.begin() + str_cur);
415+
416+
str_cur = 0;
409417
}
410418
while (false == is_find_data_end);
411419

httpserver/DataVariantMultipartFormData.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace HttpServer
2626
(
2727
const Socket &,
2828
const std::chrono::milliseconds &,
29-
const std::string &,
29+
std::string &,
3030
const size_t,
3131
const std::unordered_map<std::string, std::string> &,
3232
std::unordered_multimap<std::string, std::string> &,

httpserver/DataVariantTextPlain.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace HttpServer
1212
(
1313
const Socket &sock,
1414
const std::chrono::milliseconds &timeout,
15-
const std::string &str,
15+
std::string &str,
1616
const size_t leftBytes,
1717
const std::unordered_map<std::string, std::string> &params,
1818
std::unordered_multimap<std::string, std::string> &data,
@@ -52,6 +52,8 @@ namespace HttpServer
5252
}
5353
}
5454

55+
str.clear();
56+
5557
return true;
5658
}
5759

httpserver/DataVariantTextPlain.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace HttpServer
1414
(
1515
const Socket &,
1616
const std::chrono::milliseconds &,
17-
const std::string &,
17+
std::string &,
1818
const size_t,
1919
const std::unordered_map<std::string, std::string> &,
2020
std::unordered_multimap<std::string, std::string> &,

0 commit comments

Comments
 (0)