untested code pt 2
This commit is contained in:
parent
eee382cae9
commit
376378ee2b
1 changed files with 55 additions and 47 deletions
102
main.cpp
102
main.cpp
|
|
@ -11,6 +11,7 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
using Db = std::vector<std::vector<std::string>>;
|
using Db = std::vector<std::vector<std::string>>;
|
||||||
Db database;
|
Db database;
|
||||||
|
|
@ -68,53 +69,7 @@ void safe_exit(int signum) {
|
||||||
exit(signum);
|
exit(signum);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
void handle_client(int client_socket) {
|
||||||
std::cout << "[i] Starting blueis server..." << std::endl;
|
|
||||||
|
|
||||||
signal(SIGINT, safe_exit);
|
|
||||||
|
|
||||||
load_database("db.json");
|
|
||||||
int listening_socket = socket(AF_INET, SOCK_STREAM, 0 );
|
|
||||||
if (listening_socket < 0) {
|
|
||||||
std::cerr << "[E] Failed to create socket." << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int optval = 1;
|
|
||||||
if (setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) {
|
|
||||||
std::cerr << "[W] Failed to use SO_REUSEADDR. Continuing." << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
sockaddr_in server_address;
|
|
||||||
server_address.sin_family = AF_INET;
|
|
||||||
server_address.sin_port = htons(6379);
|
|
||||||
server_address.sin_addr.s_addr = INADDR_ANY;
|
|
||||||
|
|
||||||
if (bind(listening_socket, (sockaddr*)&server_address, sizeof(server_address)) < 0) {
|
|
||||||
std::cerr << "[E] Failed to bind to port 6379. Check for any other running redis or blueis instances." << std::endl;
|
|
||||||
close(listening_socket);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (listen(listening_socket, 5) < 0) {
|
|
||||||
std::cerr << "[E] Failed to listen on socket." << std::endl;
|
|
||||||
close(listening_socket);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::cout << "[i] Server listening on port 6379..." << std::endl;
|
|
||||||
|
|
||||||
sockaddr_in client_address;
|
|
||||||
socklen_t client_size = sizeof(client_address);
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
int client_socket = accept(listening_socket, (sockaddr*)&client_address, &client_size);
|
|
||||||
if (client_socket < 0) {
|
|
||||||
std::cerr << "[E] Failed to accept connection." << std::endl;
|
|
||||||
close(listening_socket);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
std::cout << "[i] Client connected." << std::endl;
|
|
||||||
while (true) {
|
while (true) {
|
||||||
char buffer[4096];
|
char buffer[4096];
|
||||||
int bytes_received = recv(client_socket, buffer, 4096, 0);
|
int bytes_received = recv(client_socket, buffer, 4096, 0);
|
||||||
|
|
@ -167,6 +122,59 @@ int main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::cout << "[i] Starting blueis server..." << std::endl;
|
||||||
|
|
||||||
|
signal(SIGINT, safe_exit);
|
||||||
|
|
||||||
|
load_database("db.json");
|
||||||
|
int listening_socket = socket(AF_INET, SOCK_STREAM, 0 );
|
||||||
|
if (listening_socket < 0) {
|
||||||
|
std::cerr << "[E] Failed to create socket." << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int optval = 1;
|
||||||
|
if (setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) {
|
||||||
|
std::cerr << "[W] Failed to use SO_REUSEADDR. Continuing." << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
sockaddr_in server_address;
|
||||||
|
server_address.sin_family = AF_INET;
|
||||||
|
server_address.sin_port = htons(6379);
|
||||||
|
server_address.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
|
if (bind(listening_socket, (sockaddr*)&server_address, sizeof(server_address)) < 0) {
|
||||||
|
std::cerr << "[E] Failed to bind to port 6379. Check for any other running redis or blueis instances." << std::endl;
|
||||||
|
close(listening_socket);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listen(listening_socket, 5) < 0) {
|
||||||
|
std::cerr << "[E] Failed to listen on socket." << std::endl;
|
||||||
|
close(listening_socket);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "[i] Server listening on port 6379..." << std::endl;
|
||||||
|
|
||||||
|
sockaddr_in client_address;
|
||||||
|
socklen_t client_size = sizeof(client_address);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
int client_socket = accept(listening_socket, (sockaddr*)&client_address, &client_size);
|
||||||
|
if (client_socket < 0) {
|
||||||
|
std::cerr << "[E] Failed to accept connection." << std::endl;
|
||||||
|
close(listening_socket);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
std::thread t(handle_client, client_socket); // Temporarily using the shit method of one thread per client despite the DoS potential until I can get async down.
|
||||||
|
if (t.joinable()) {
|
||||||
|
t.detach();
|
||||||
|
}
|
||||||
|
std::cout << "[i] Client connected." << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue