Skip to content

Commit 598b748

Browse files
committed
Added parsing cookies
1 parent 04df700 commit 598b748

File tree

11 files changed

+275
-103
lines changed

11 files changed

+275
-103
lines changed

httpserverapp.userprefs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
<Properties>
2-
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
3-
<MonoDevelop.Ide.Workbench ActiveDocument="httpserverapp/Utils.cpp">
2+
<MonoDevelop.Ide.Workspace ActiveConfiguration="Release" />
3+
<MonoDevelop.Ide.Workbench ActiveDocument="httpserverapp/Main.cpp">
44
<Files>
55
<File FileName="httpserverapp/Main.h" Line="1" Column="1" />
6-
<File FileName="httpserverapp/Main.cpp" Line="58" Column="2" />
6+
<File FileName="httpserverapp/Main.cpp" Line="26" Column="42" />
77
<File FileName="httpserverapp/ServerRequest.h" Line="1" Column="1" />
8-
<File FileName="httpserverapp/ServerResponse.h" Line="7" Column="1" />
9-
<File FileName="httpserverapp/Utils.h" Line="47" Column="57" />
8+
<File FileName="httpserverapp/ServerResponse.h" Line="1" Column="1" />
9+
<File FileName="httpserverapp/Utils.h" Line="55" Column="2" />
1010
<File FileName="httpserverapp/Test.h" Line="1" Column="1" />
11-
<File FileName="httpserverapp/Test.cpp" Line="13" Column="2" />
11+
<File FileName="httpserverapp/Test.cpp" Line="24" Column="3" />
1212
<File FileName="httpserverapp/Socket.h" Line="1" Column="1" />
13-
<File FileName="httpserverapp/Utils.cpp" Line="22" Column="2" />
13+
<File FileName="httpserverapp/Utils.cpp" Line="272" Column="112" />
1414
<File FileName="httpserverapp/Socket.cpp" Line="1" Column="1" />
1515
<File FileName="httpserverapp/System.h" Line="1" Column="1" />
1616
<File FileName="httpserverapp/RawData.h" Line="1" Column="1" />
1717
<File FileName="httpserverapp/System.cpp" Line="1" Column="1" />
18+
<File FileName="httpserverapp/ResourceAbstract.cpp" Line="19" Column="3" />
1819
</Files>
1920
</MonoDevelop.Ide.Workbench>
2021
<MonoDevelop.Ide.DebuggingService.Breakpoints>

httpserverapp/FileIncoming.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,33 @@
66
namespace HttpServer
77
{
88
FileIncoming::FileIncoming(const std::string &fileName, const std::string &fileType, const size_t fileSize)
9+
: file_name(fileName), file_type(fileType), file_size(fileSize)
910
{
10-
file_name = fileName;
11-
file_type = fileType;
12-
file_size = fileSize;
11+
1312
}
1413

15-
FileIncoming::~FileIncoming()
14+
FileIncoming::FileIncoming(const FileIncoming &file)
15+
: file_name(file.file_name), file_type(file.file_type), file_size(file.file_size)
1616
{
1717

1818
}
1919

20+
FileIncoming::FileIncoming(FileIncoming &&file)
21+
: file_name(file.file_name), file_type(file.file_type), file_size(file.file_size)
22+
{
23+
file.file_name.clear();
24+
file.file_type.clear();
25+
file.file_size = 0;
26+
}
27+
2028
bool FileIncoming::isExists() const
2129
{
22-
std::ifstream file(file_name);
30+
std::ifstream file(file_name, std::ifstream::binary);
2331

2432
bool is_exists = file.good();
2533

2634
file.close();
2735

2836
return is_exists;
2937
}
30-
};
38+
};

httpserverapp/FileIncoming.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ namespace HttpServer
1212
size_t file_size;
1313

1414
private:
15-
FileIncoming();
15+
FileIncoming() = delete;
1616

1717
public:
1818
FileIncoming(const std::string &, const std::string &, const size_t);
19-
~FileIncoming();
19+
FileIncoming(const FileIncoming &);
20+
FileIncoming(FileIncoming &&);
21+
~FileIncoming() = default;
2022

2123
inline std::string getName() const
2224
{
@@ -35,4 +37,4 @@ namespace HttpServer
3537

3638
bool isExists() const;
3739
};
38-
};
40+
};

httpserverapp/Main.cpp

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,30 @@ DLLEXPORT int application_call(HttpServer::server_request *request, HttpServer::
1616
std::unordered_map<std::string, std::string> headers;
1717
std::unordered_multimap<std::string, std::string> data;
1818
std::unordered_multimap<std::string, HttpServer::FileIncoming> files;
19+
std::unordered_multimap<std::string, std::string> cookies;
1920

2021
Utils::rawPairsToStlUnorderedMultimap(params, request->params, request->params_count);
2122
Utils::rawPairsToStlUnorderedMap(headers, request->headers, request->headers_count);
2223
Utils::rawPairsToStlUnorderedMultimap(data, request->data, request->data_count);
2324
Utils::rawFilesInfoToFilesIncoming(files, request->files, request->files_count);
2425

26+
auto it_cookie = headers.find("Cookie");
27+
28+
if (headers.end() != it_cookie)
29+
{
30+
Utils::parseCookies(it_cookie->second, cookies);
31+
}
32+
2533
HttpServer::ServerRequest proc_request {
2634
HttpServer::Socket(request->socket),
2735
std::string(request->method),
2836
std::string(request->uri_reference),
2937
std::string(request->document_root),
30-
params,
31-
headers,
32-
data,
33-
files
38+
std::move(params),
39+
std::move(headers),
40+
std::move(data),
41+
std::move(files),
42+
std::move(cookies)
3443
};
3544

3645
HttpServer::ServerResponse proc_response {
@@ -42,11 +51,17 @@ DLLEXPORT int application_call(HttpServer::server_request *request, HttpServer::
4251

4352
int result = EXIT_SUCCESS;
4453

45-
std::ifstream file(absolute_path);
54+
std::ifstream file(absolute_path, std::ifstream::binary);
4655

4756
if (file)
4857
{
49-
proc_response.headers["Connection"] = "keep-alive";
58+
auto it_connection = proc_request.headers.find("Connection");
59+
60+
if (proc_request.headers.cend() != it_connection)
61+
{
62+
proc_response.headers["Connection"] = it_connection->second;
63+
}
64+
5065
proc_response.headers["X-Sendfile"] = absolute_path;
5166
}
5267
else

httpserverapp/ServerRequest.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ namespace HttpServer
3434
* @member const std::unordered_multimap<std::string, std::string> params - параметры ресурса
3535
* @member const std::unordered_map<std::string, std::string> headers - заголовки запроса
3636
* @member const std::unordered_multimap<std::string, std::string> data - входящие данные запроса
37-
* @member const std::unordered_multimap<std::string, FileIncoming *> files - входящие файлы запроса
37+
* @member const std::unordered_multimap<std::string, FileIncoming> files - входящие файлы запроса
38+
* @member const std::unordered_multimap<std::string, std::string> cookies - входящие куки запроса
3839
*/
3940
struct ServerRequest
4041
{
@@ -46,5 +47,6 @@ namespace HttpServer
4647
const std::unordered_map<std::string, std::string> headers;
4748
const std::unordered_multimap<std::string, std::string> data;
4849
const std::unordered_multimap<std::string, FileIncoming> files;
50+
const std::unordered_multimap<std::string, std::string> cookies;
4951
};
5052
};

0 commit comments

Comments
 (0)