Commit de fin de journee

multi_plaform
ambigipathyv ago%!(EXTRA string=1 year)
parent 1dbcc6b8d0
commit 200e7958bb
  1. 1
      bakanet/src/bakanet/http/http_packet.cpp
  2. 2
      bakanet/src/bakanet/http/http_server.cpp
  3. 0
      bakanet/src/bakanet/http/radix_tree.cpp
  4. 0
      bakanet/src/bakanet/http/radix_tree.h
  5. 11
      bakanet/src/bakanet/sock_layer/socket.h
  6. 14
      bakanet/src/platform/linux/linux_socket.cpp
  7. 2
      bakanet/src/platform/linux/linux_socket.h
  8. 61
      bakanet/src/platform/windows/windows_socket.cpp
  9. 10
      bakanet/src/platform/windows/windows_socket.h

@ -62,6 +62,7 @@ namespace Bk::Net {
HttpReponse::HttpReponse(std::string data) HttpReponse::HttpReponse(std::string data)
{ {
//To do
status = ""; status = "";
version = ""; version = "";
params = HttpParams(0); params = HttpParams(0);

@ -10,11 +10,9 @@ namespace Bk::Net {
bool running = socket->init() && socket->start(5); bool running = socket->init() && socket->start(5);
while (running) while (running)
{ {
log("BEFORE")
Connection conn = socket->ack(); Connection conn = socket->ack();
if(conn >= 0) if(conn >= 0)
{ {
log("AFTER")
route_request(conn, recv_request(conn)); route_request(conn, recv_request(conn));
closesocket(conn); closesocket(conn);
} }

@ -15,7 +15,7 @@ namespace Bk::Net {
virtual bool init() = 0; virtual bool init() = 0;
virtual bool start(int cpt_conn) = 0; virtual bool start(int cpt_conn) = 0;
virtual Connection ack() = 0; virtual std::unique_ptr<Socket> ack() = 0;
virtual bool conn() = 0; virtual bool conn() = 0;
virtual int get_raw_socket() = 0; virtual int get_raw_socket() = 0;
@ -26,13 +26,10 @@ namespace Bk::Net {
virtual std::vector<char> obtain(Connection conn, int size) = 0; virtual std::vector<char> obtain(Connection conn, int size) = 0;
template<typename T> template<typename T>
static bool set_option(Socket& socket, int level, int option_name, const T* option_value) static bool set_option(Socket& socket, int level, int option_name, const T* option_value) { return setsockopt(socket.get_raw_socket(), level, option_name, (void*)option_value, sizeof(T)) == 0 ? true : false; }
{
int status = setsockopt(socket.get_raw_socket(), level, option_name, (void*)option_value, sizeof(T));
log(status)
return status == 0 ? true : false;
}
static std::unique_ptr<Socket> create(IpAddress ip, int port, IpProtocol proto); static std::unique_ptr<Socket> create(IpAddress ip, int port, IpProtocol proto);
private:
static std::unique_ptr<Socket> create(int id, IpVersion ver, IpProtocol proto);
}; };
} }

@ -63,11 +63,6 @@ namespace Bk::Net {
write(socket_id, packet.data(), packet.size()); write(socket_id, packet.data(), packet.size());
} }
void LinuxSocket::emit(Connection conn, std::vector<char> packet)
{
write(conn, packet.data(), packet.size());
}
std::vector<char> LinuxSocket::obtain(int size) std::vector<char> LinuxSocket::obtain(int size)
{ {
std::vector<char> buffer; std::vector<char> buffer;
@ -76,15 +71,6 @@ namespace Bk::Net {
buffer.resize(read_size); buffer.resize(read_size);
return buffer; return buffer;
} }
std::vector<char> LinuxSocket::obtain(Connection conn, int size)
{
std::vector<char> buffer;
buffer.resize(size);
int read_size = read(conn, buffer.data(), buffer.size() - 1);
buffer.resize(read_size);
return buffer;
}
std::unique_ptr<Socket> Socket::create(IpAddress ip, int port, IpProtocol proto) std::unique_ptr<Socket> Socket::create(IpAddress ip, int port, IpProtocol proto)
{ {

@ -17,9 +17,7 @@ namespace Bk::Net {
int get_raw_socket() override { return socket_id; } int get_raw_socket() override { return socket_id; }
void emit(std::vector<char> packet) override; void emit(std::vector<char> packet) override;
void emit(Connection socket, std::vector<char> packet) override;
std::vector<char> obtain(int size) override; std::vector<char> obtain(int size) override;
std::vector<char> obtain(Connection conn, int size) override;
private: private:
Connection socket_id; Connection socket_id;

@ -4,8 +4,19 @@
namespace Bk::Net { namespace Bk::Net {
int WindowsSocket::socket_count = 0; int WindowsSocket::socket_count = 0;
WindowsSocket::WindowsSocket(int id, IpVersion ver, IpProtocol proto)
: id(id), ip_proto(proto), main(false)
{
char myIP[16];
struct sockaddr sock_addr;
getsockname(id, (struct sockaddr*)&addr, sizeof(addr));
inet_ntop((int)ver, &addr.sin_addr, myIP, sizeof(myIP));
ip_addr = IpAddress(std::string(myIP, 16), ver);
addr = sock_addr;
}
WindowsSocket::WindowsSocket(IpAddress ip, int port, IpProtocol proto) WindowsSocket::WindowsSocket(IpAddress ip, int port, IpProtocol proto)
: ip_addr(ip), ip_proto(proto) : ip_addr(ip), ip_proto(proto), main(true)
{ {
if (socket_count++ < 1) if (socket_count++ < 1)
{ {
@ -22,27 +33,28 @@ namespace Bk::Net {
} }
//WindowsSocket creation step //WindowsSocket creation step
if ((socket_id = (int)socket((int)ip_addr.version, (int)ip_proto, 0)) < 0) if ((id = (int)socket((int)ip_addr.version, (int)ip_proto, 0)) < 0)
{ {
log("socket failed " << WSAGetLastError()); log("socket failed " << WSAGetLastError());
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
addr.sin_addr = ip_addr.get_data(); struct sockaddr_in in_addr;
addr.sin_family = (int)ip_addr.version; in_addr.sin_addr = ip_addr.get_data();
addr.sin_port = htons(port); in_addr.sin_family = (int)ip_addr.version;
in_addr.sin_port = htons(port);
} }
WindowsSocket::~WindowsSocket() WindowsSocket::~WindowsSocket()
{ {
WSACleanup(); if (main && socket_count-- < 1) WSACleanup();
closesocket(socket_id); closesocket(id);
} }
bool WindowsSocket::init() bool WindowsSocket::init()
{ {
//Binding step //Binding step
int status; int status;
if ((status = bind(socket_id, (struct sockaddr*)&addr, sizeof(addr)) < 0)) if ((status = bind(id, (struct sockaddr*)&addr, sizeof(addr)) < 0))
{ {
log("bind failed " << WSAGetLastError()); log("bind failed " << WSAGetLastError());
return false; return false;
@ -53,58 +65,43 @@ namespace Bk::Net {
bool WindowsSocket::start(int cpt_conn = SOMAXCONN) bool WindowsSocket::start(int cpt_conn = SOMAXCONN)
{ {
//Listening step //Listening step
if (listen(socket_id, cpt_conn) == SOCKET_ERROR) if (listen(id, cpt_conn) == SOCKET_ERROR) { return false; }
{
return false;
}
return true; return true;
} }
Connection WindowsSocket::ack() Connection WindowsSocket::ack()
{ {
socklen_t addrlen = sizeof(addr); socklen_t addrlen = sizeof(addr);
return accept(socket_id, (struct sockaddr*)&addr, &addrlen); return accept(id, (struct sockaddr*)&addr, &addrlen);
} }
bool WindowsSocket::conn() bool WindowsSocket::conn()
{ {
if (connect(socket_id, (struct sockaddr*)&addr, sizeof(addr)) < 0) if (connect(id, (struct sockaddr*)&addr, sizeof(addr)) < 0) { return false; }
{
return false;
}
return true; return true;
} }
void WindowsSocket::emit(std::vector<char> packet) void WindowsSocket::emit(std::vector<char> packet)
{ {
send((SOCKET)socket_id, packet.data(), packet.size(), 0); send((SOCKET)id, packet.data(), packet.size(), 0);
}
void WindowsSocket::emit(Connection conn, std::vector<char> packet)
{
send((SOCKET)conn, packet.data(), packet.size(), 0);
} }
std::vector<char> WindowsSocket::obtain(int size) std::vector<char> WindowsSocket::obtain(int size)
{ {
std::vector<char> buffer; std::vector<char> buffer;
buffer.resize(size); buffer.resize(size);
int read_size = recv((SOCKET)socket_id, buffer.data(), buffer.size() - 1, 0); int read_size = recv((SOCKET)id, buffer.data(), buffer.size() - 1, 0);
buffer.resize(read_size); buffer.resize(read_size);
return buffer; return buffer;
} }
std::vector<char> WindowsSocket::obtain(Connection conn, int size) std::unique_ptr<Socket> Socket::create(IpAddress ip, int port, IpProtocol proto)
{ {
std::vector<char> buffer; return std::unique_ptr<Socket>(new WindowsSocket(ip, port, proto));
buffer.resize(size);
int read_size = recv((SOCKET)conn, buffer.data(), buffer.size() - 1, 0);
buffer.resize(read_size);
return buffer;
} }
std::unique_ptr<Socket> Socket::create(IpAddress ip, int port, IpProtocol proto) std::unique_ptr<Socket> Socket::create(int id, IpVersion ver, IpProtocol proto)
{ {
return std::unique_ptr<Socket>(new WindowsSocket(ip, port, proto)); return std::unique_ptr<Socket>(new WindowsSocket(int id, IpVersion ver, IpProtocol proto));
} }
} }

@ -9,6 +9,7 @@ namespace Bk::Net {
static int socket_count; static int socket_count;
WindowsSocket(IpAddress ip, int port, IpProtocol proto); WindowsSocket(IpAddress ip, int port, IpProtocol proto);
WindowsSocket(int id, IpVersion ver, IpProtocol proto);
virtual ~WindowsSocket(); virtual ~WindowsSocket();
bool init() override; bool init() override;
@ -16,17 +17,16 @@ namespace Bk::Net {
Connection ack() override; Connection ack() override;
bool conn() override; bool conn() override;
int get_raw_socket() override { return socket_id; } int get_raw_socket() override { return id; }
void emit(std::vector<char> packet) override; void emit(std::vector<char> packet) override;
void emit(Connection socket, std::vector<char> packet) override;
std::vector<char> obtain(int size) override; std::vector<char> obtain(int size) override;
std::vector<char> obtain(Connection conn, int size) override;
private: private:
Connection socket_id; Connection id;
struct sockaddr_in addr; struct sockaddr addr;
IpAddress ip_addr; IpAddress ip_addr;
IpProtocol ip_proto; IpProtocol ip_proto;
bool main;
}; };
} }
Loading…
Cancel
Save