fixed a leak and files should be received reliably
This commit is contained in:
parent
078fb9a706
commit
8acc0b89e1
2 changed files with 10 additions and 7 deletions
|
@ -4,8 +4,7 @@ set(CMAKE_CXX_STANDARD 23)
|
||||||
|
|
||||||
add_subdirectory(netlib)
|
add_subdirectory(netlib)
|
||||||
|
|
||||||
add_executable(web_serv main.cpp
|
add_executable(web_serv main.cpp)
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(web_serv PRIVATE netlib)
|
target_link_libraries(web_serv PRIVATE netlib)
|
||||||
|
|
||||||
|
|
14
main.cpp
14
main.cpp
|
@ -142,6 +142,8 @@ std::string get_filename(std::string data)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
netlib::server_raw server(false, 0);
|
netlib::server_raw server(false, 0);
|
||||||
|
@ -213,24 +215,26 @@ int main()
|
||||||
}
|
}
|
||||||
if (state == 1)
|
if (state == 1)
|
||||||
{
|
{
|
||||||
char *line = server.get_line(user);
|
char *line1 = server.get_line(user);
|
||||||
char *line2 = server.get_line(user);
|
char *line2 = server.get_line(user);
|
||||||
char *line3 = server.get_line(user);
|
char *line3 = server.get_line(user);
|
||||||
if (line && line2)
|
if (line1 && line2)
|
||||||
{
|
{
|
||||||
std::string line_str = std::string(line);
|
std::string line_str = std::string(line1);
|
||||||
|
std::string line_str2 = std::string(line);
|
||||||
auto h = parse_header(line_str);
|
auto h = parse_header(line_str);
|
||||||
std::vector<std::string> file_ = split(h.begin()->second, "; ");
|
std::vector<std::string> file_ = split(h.begin()->second, "; ");
|
||||||
std::string filename = get_filename(file_.back());
|
std::string filename = get_filename(file_.back());
|
||||||
size_t size = file_size - line_str.size() - std::string(line2).size() - std::string(line3).size();
|
size_t size = file_size - (line_str.size() + std::string(line2).size() + std::string(line3).size() + (line_str2.size() * 2) + 4);
|
||||||
char *file_data = server.receive_data_ensured(user, size);
|
char *file_data = server.receive_data_ensured(user, size);
|
||||||
std::ofstream a(filename, std::ios::binary);
|
std::ofstream a(filename, std::ios::binary);
|
||||||
a.write(file_data, size);
|
a.write(file_data, size);
|
||||||
|
a.close();
|
||||||
print_map(h);
|
print_map(h);
|
||||||
free(file_data);
|
free(file_data);
|
||||||
std::println("File {} received with {}B size", filename, size);
|
std::println("File {} received with {}B size", filename, size);
|
||||||
}
|
}
|
||||||
free(line);
|
free(line1);
|
||||||
free(line2);
|
free(line2);
|
||||||
free(line3);
|
free(line3);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue