Skip to content

Commit 338e0bc

Browse files
committed
fix: winsocket refactor, exceptions, bugs
1 parent 5ee7a4a commit 338e0bc

9 files changed

+49
-147
lines changed

include/logger.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace tpt
1717
DEBUG,
1818
INFO,
1919
WARNING,
20-
ERROR,
20+
ERR,
2121
CRITICAL
2222
};
2323

@@ -34,7 +34,7 @@ namespace tpt
3434
#define LOG_DEBUG(logger, message) LOG(logger, tpt::LogLevel::DEBUG, message)
3535
#define LOG_INFO(logger, message) LOG(logger, tpt::LogLevel::INFO, message)
3636
#define LOG_WARNING(logger, message) LOG(logger, tpt::LogLevel::WARNING, message)
37-
#define LOG_ERROR(logger, message) LOG(logger, tpt::LogLevel::ERROR, message)
37+
#define LOG_ERROR(logger, message) LOG(logger, tpt::LogLevel::ERR, message)
3838
#define LOG_CRITICAL(logger, message) LOG(logger, tpt::LogLevel::CRITICAL, message)
3939
};
4040

include/teapot.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
#endif
3232

3333
#ifdef _WIN32
34-
#include <windows.h>
3534
#include "win_socket.hpp"
3635
#endif
3736

include/win_socket.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ namespace tpt
3131
unsigned int port;
3232
unsigned int max_connections;
3333
std::string ip_address;
34+
std::string client_ip;
3435
std::vector<std::string> ip_blacklist;
36+
std::vector<SOCKET> client_sockets;
3537
ConsoleLogger logger;
3638

3739
public:

src/console_logger.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ namespace tpt
2020
case LogLevel::WARNING:
2121
colorCode = "\033[33m"; // Yellow
2222
break;
23-
case LogLevel::ERROR:
23+
case LogLevel::ERR:
2424
colorCode = "\033[31m"; // Red
2525
break;
2626
case LogLevel::CRITICAL:

src/logger.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace tpt
1212
return "INFO";
1313
case LogLevel::WARNING:
1414
return "WARNING";
15-
case LogLevel::ERROR:
15+
case LogLevel::ERR:
1616
return "ERROR";
1717
case LogLevel::CRITICAL:
1818
return "CRITICAL";

src/teapot.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ Teapot::Teapot(std::string ip_address, unsigned int port, unsigned int max_conne
200200
this->socket = tpt::UnixSocket(this->logger, this->ip_address, this->port, this->max_connections);
201201
#endif
202202
#ifdef _WIN32
203-
this->socket = tpt::WinSocket(this->ip_address, this->port, this->max_connections);
203+
this->socket = tpt::WinSocket(this->logger, this->ip_address, this->port, this->max_connections);
204204
#endif
205205
}
206206

src/win_socket.cpp

+25-140
Original file line numberDiff line numberDiff line change
@@ -3,147 +3,31 @@
33

44
using namespace tpt;
55

6-
WinSocket::WinSocket()
7-
{
8-
this->ip_address = "127.0.0.1";
9-
this->port = 8000;
10-
this->max_connections = 10;
11-
this->logger = ConsoleLogger();
12-
13-
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
14-
{
15-
std::printf("Failed. Error Code : %d", WSAGetLastError());
16-
WSACleanup();
17-
exit(EXIT_FAILURE);
18-
}
19-
20-
std::cout << "Creating socket ..." << std::endl;
21-
this->server_socket = socket(AF_INET, SOCK_STREAM, 0);
22-
if (this->server_socket == INVALID_SOCKET)
23-
{
24-
std::printf("Could not create socket: %d\n", WSAGetLastError());
25-
WSACleanup();
26-
exit(EXIT_FAILURE);
27-
}
28-
29-
this->server_address.sin_family = AF_INET;
30-
this->server_address.sin_port = htons(this->port);
31-
this->server_address.sin_addr.s_addr = inet_addr(this->ip_address.c_str());
32-
33-
Utils::fillIPBlacklist(this->ip_blacklist);
34-
}
35-
36-
WinSocket::WinSocket(ConsoleLogger logger)
37-
{
38-
this->ip_address = "127.0.0.1";
39-
this->port = 8000;
40-
this->max_connections = 10;
41-
this->logger = logger;
42-
43-
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
44-
{
45-
std::printf("Failed. Error Code : %d", WSAGetLastError());
46-
WSACleanup();
47-
exit(EXIT_FAILURE);
48-
}
49-
50-
std::cout << "Creating socket ..." << std::endl;
51-
this->server_socket = socket(AF_INET, SOCK_STREAM, 0);
52-
if (this->server_socket == INVALID_SOCKET)
53-
{
54-
std::printf("Could not create socket: %d\n", WSAGetLastError());
55-
WSACleanup();
56-
exit(EXIT_FAILURE);
57-
}
58-
59-
this->server_address.sin_family = AF_INET;
60-
this->server_address.sin_port = htons(this->port);
61-
this->server_address.sin_addr.s_addr = inet_addr(this->ip_address.c_str());
62-
63-
Utils::fillIPBlacklist(this->ip_blacklist);
64-
}
65-
66-
WinSocket::WinSocket(ConsoleLogger logger, unsigned int port)
67-
{
68-
this->ip_address = "127.0.0.1";
69-
this->port = port;
70-
this->max_connections = 10;
71-
this->logger = logger;
72-
73-
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
74-
{
75-
std::printf("Failed. Error Code : %d", WSAGetLastError());
76-
WSACleanup();
77-
exit(EXIT_FAILURE);
78-
}
6+
WinSocket::WinSocket() : WinSocket(ConsoleLogger()) {}
797

80-
std::cout << "Creating socket ..." << std::endl;
81-
this->server_socket = socket(AF_INET, SOCK_STREAM, 0);
82-
if (this->server_socket == INVALID_SOCKET)
83-
{
84-
std::printf("Could not create socket: %d\n", WSAGetLastError());
85-
WSACleanup();
86-
exit(EXIT_FAILURE);
87-
}
88-
89-
this->server_address.sin_family = AF_INET;
90-
this->server_address.sin_port = htons(this->port);
91-
this->server_address.sin_addr.s_addr = inet_addr(this->ip_address.c_str());
92-
93-
Utils::fillIPBlacklist(this->ip_blacklist);
94-
}
95-
96-
WinSocket::WinSocket(ConsoleLogger logger, std::string ip_address, unsigned int port)
97-
{
98-
this->ip_address = ip_address;
99-
this->port = port;
100-
this->max_connections = 10;
101-
this->logger = logger;
102-
103-
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
104-
{
105-
std::printf("Failed. Error Code : %d", WSAGetLastError());
106-
WSACleanup();
107-
exit(EXIT_FAILURE);
108-
}
109-
110-
std::cout << "Creating socket ..." << std::endl;
111-
this->server_socket = socket(AF_INET, SOCK_STREAM, 0);
112-
if (this->server_socket == INVALID_SOCKET)
113-
{
114-
std::printf("Could not create socket: %d\n", WSAGetLastError());
115-
WSACleanup();
116-
exit(EXIT_FAILURE);
117-
}
8+
WinSocket::WinSocket(ConsoleLogger logger) : WinSocket(logger, "127.0.0.1", 8000, 10) {}
1189

119-
this->server_address.sin_family = AF_INET;
120-
this->server_address.sin_port = htons(this->port);
121-
this->server_address.sin_addr.s_addr = inet_addr(this->ip_address.c_str());
10+
WinSocket::WinSocket(ConsoleLogger logger, unsigned int port) : WinSocket(logger, "127.0.0.1", port, 10) {}
12211

123-
Utils::fillIPBlacklist(this->ip_blacklist);
124-
}
12+
WinSocket::WinSocket(ConsoleLogger logger, std::string ip_address, unsigned int port) : WinSocket(logger, ip_address, port, 10) {}
12513

12614
WinSocket::WinSocket(ConsoleLogger logger, std::string ip_address, unsigned int port, unsigned int max_connections)
12715
{
12816
this->ip_address = ip_address;
12917
this->port = port;
130-
this->max_connections = 10;
18+
this->max_connections = max_connections;
13119
this->logger = logger;
13220

13321
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
13422
{
135-
std::printf("Failed. Error Code : %d", WSAGetLastError());
136-
WSACleanup();
137-
exit(EXIT_FAILURE);
23+
throw SocketCreationException("WSAStartup error", WSAGetLastError());
13824
}
13925

14026
std::cout << "Creating socket ..." << std::endl;
14127
this->server_socket = socket(AF_INET, SOCK_STREAM, 0);
14228
if (this->server_socket == INVALID_SOCKET)
14329
{
144-
std::printf("Could not create socket: %d\n", WSAGetLastError());
145-
WSACleanup();
146-
exit(EXIT_FAILURE);
30+
throw SocketCreationException("could not create socket", WSAGetLastError());
14731
}
14832

14933
this->server_address.sin_family = AF_INET;
@@ -158,11 +42,8 @@ void WinSocket::bindSocket()
15842
std::cout << "Binding socket ..." << std::endl;
15943
if ((bind(this->server_socket, (struct sockaddr *)&this->server_address, sizeof(server_address))) == SOCKET_ERROR)
16044
{
161-
std::printf("Binding failed: %d\n", WSAGetLastError());
162-
WSACleanup();
163-
exit(EXIT_FAILURE);
45+
throw SocketBindingException("binding failed", WSAGetLastError());
16446
}
165-
this->setSocketTimeout(this->server_socket, 5);
16647
std::cout << "Binding done!" << std::endl;
16748
std::cout << "Listening to connections ..." << std::endl;
16849
}
@@ -171,22 +52,20 @@ void WinSocket::listenToConnections()
17152
{
17253
if ((listen(this->server_socket, this->max_connections)) == SOCKET_ERROR)
17354
{
174-
std::printf("Listening failed: %d\n", WSAGetLastError());
175-
closesocket(this->server_socket);
176-
WSACleanup();
177-
exit(EXIT_FAILURE);
55+
throw SocketListenException("listening failed", WSAGetLastError());
17856
}
17957
}
18058

18159
void WinSocket::acceptConnection(SOCKET &client_socket, void *client_address)
18260
{
183-
int client_addr_size = sizeof(sockaddr_in);
184-
client_socket = accept(this->server_socket, static_cast<sockaddr *>(client_address), &client_addr_size);
61+
struct sockaddr_storage client_addr_storage;
62+
int client_addr_size = sizeof(client_addr_storage);
63+
64+
//this->setSocketTimeout(this->server_socket, 5);
65+
client_socket = accept(this->server_socket, (sockaddr *)&client_addr_storage, &client_addr_size);
18566
if (client_socket == INVALID_SOCKET)
18667
{
187-
std::printf("Error accepting connections: %d\n", WSAGetLastError());
188-
WSACleanup();
189-
exit(EXIT_FAILURE);
68+
throw SocketAcceptException("error accepting connections", WSAGetLastError());
19069
}
19170

19271
// Assuming client_address is meant to store the result
@@ -225,16 +104,17 @@ ssize_t WinSocket::receiveData(SOCKET client_socket, char *buffer, unsigned int
225104
ssize_t data = recv(client_socket, buffer, buffer_size, 0);
226105
if (data < 0)
227106
{
228-
std::printf("Receive error\n");
229-
WSACleanup();
230-
exit(EXIT_FAILURE);
107+
throw SocketReceiveException("recv error", WSAGetLastError());
231108
}
232109
return data;
233110
}
234111

235112
void WinSocket::sendData(SOCKET client_socket, const void *buffer, unsigned int buffer_size, int flags)
236113
{
237-
send(client_socket, (char *)buffer, buffer_size, flags);
114+
if (send(client_socket, (char *)buffer, buffer_size, flags) == -1)
115+
{
116+
throw SocketSendException();
117+
}
238118
}
239119

240120
void WinSocket::closeSocket()
@@ -267,4 +147,9 @@ void WinSocket::setSocketTimeout(SOCKET sock, int timeoutSec)
267147

268148
WinSocket::~WinSocket() {}
269149

150+
std::string WinSocket::getClientIp()
151+
{
152+
return this->client_ip;
153+
}
154+
270155
#endif

teapot.vcxproj

+5-1
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,10 @@
104104
</Link>
105105
</ItemDefinitionGroup>
106106
<ItemGroup>
107+
<ClCompile Include="src\console_logger.cpp" />
107108
<ClCompile Include="src\cors_middleware.cpp" />
108109
<ClCompile Include="src\http_status.cpp" />
110+
<ClCompile Include="src\logger.cpp" />
109111
<ClCompile Include="src\main.cpp" />
110112
<ClCompile Include="src\request.cpp" />
111113
<ClCompile Include="src\response.cpp" />
@@ -118,9 +120,11 @@
118120
</ItemGroup>
119121
<ItemGroup>
120122
<ClInclude Include="include\base_exceptions.hpp" />
123+
<ClInclude Include="include\console_logger.hpp" />
121124
<ClInclude Include="include\context.hpp" />
122125
<ClInclude Include="include\cors_middleware.hpp" />
123126
<ClInclude Include="include\http_status.hpp" />
127+
<ClInclude Include="include\logger.hpp" />
124128
<ClInclude Include="include\middleware.hpp" />
125129
<ClInclude Include="include\request.hpp" />
126130
<ClInclude Include="include\response.hpp" />
@@ -142,4 +146,4 @@
142146
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
143147
<ImportGroup Label="ExtensionTargets">
144148
</ImportGroup>
145-
</Project>
149+
</Project>

teapot.vcxproj.filters

+12
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@
4848
<ClCompile Include="src\win_socket.cpp">
4949
<Filter>Source Files</Filter>
5050
</ClCompile>
51+
<ClCompile Include="src\logger.cpp">
52+
<Filter>Source Files</Filter>
53+
</ClCompile>
54+
<ClCompile Include="src\console_logger.cpp">
55+
<Filter>Source Files</Filter>
56+
</ClCompile>
5157
</ItemGroup>
5258
<ItemGroup>
5359
<ClInclude Include="include\base_exceptions.hpp">
@@ -92,6 +98,12 @@
9298
<ClInclude Include="include\win_socket.hpp">
9399
<Filter>Header Files</Filter>
94100
</ClInclude>
101+
<ClInclude Include="include\logger.hpp">
102+
<Filter>Header Files</Filter>
103+
</ClInclude>
104+
<ClInclude Include="include\console_logger.hpp">
105+
<Filter>Header Files</Filter>
106+
</ClInclude>
95107
</ItemGroup>
96108
<ItemGroup>
97109
<None Include="static\201.html" />

0 commit comments

Comments
 (0)