Little corrections

main
anulax1225 ago%!(EXTRA string=2 months)
parent 856273e78f
commit 0f5e3e6d77
  1. 2
      src/bakanet/core/socket.h
  2. 10
      src/bakanet/http/server.cpp
  3. 32
      src/platform/linux/linux_socket.cpp
  4. 4
      src/platform/linux/linux_socket.h
  5. 7
      src/platform/windows/windows_socket.cpp

@ -18,8 +18,6 @@ namespace Bk::Net {
virtual bool start(int cpt_conn) = 0; virtual bool start(int cpt_conn) = 0;
virtual Socket* ack() = 0; virtual Socket* ack() = 0;
virtual bool conn() = 0; virtual bool conn() = 0;
virtual bool hasConnection(int seconds = 0, int microseconds = 0) = 0;
virtual int get_raw_socket() = 0; virtual int get_raw_socket() = 0;
virtual const std::string get_ip() = 0; virtual const std::string get_ip() = 0;

@ -23,8 +23,8 @@ namespace Bk::Net {
route_request(conn, recv_request(conn)); route_request(conn, recv_request(conn));
delete conn; delete conn;
}); });
pool.stop();
} }
pool.stop();
} }
void HttpServer::get(std::string url, RequestHandler req_handler) void HttpServer::get(std::string url, RequestHandler req_handler)
@ -32,7 +32,7 @@ namespace Bk::Net {
RadixTree* tree; RadixTree* tree;
Tools::string_trim(url, " /"); Tools::string_trim(url, " /");
auto splits = Tools::string_split(url, "/"); auto splits = Tools::string_split(url, "/");
if (tree = radix.get_node(splits->data(), splits->size())) tree->value["GET"] = req_handler; if ((tree = radix.get_node(splits->data(), splits->size()))) tree->value["GET"] = req_handler;
else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "GET", req_handler }})); else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "GET", req_handler }}));
} }
@ -41,7 +41,7 @@ namespace Bk::Net {
RadixTree* tree; RadixTree* tree;
Tools::string_trim(url, " /"); Tools::string_trim(url, " /");
auto splits = Tools::string_split(url, "/"); auto splits = Tools::string_split(url, "/");
if (tree = radix.get_node(splits->data(), splits->size())) tree->value["POST"] = req_handler; if ((tree = radix.get_node(splits->data(), splits->size()))) tree->value["POST"] = req_handler;
else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "POST", req_handler }})); else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "POST", req_handler }}));
} }
@ -50,7 +50,7 @@ namespace Bk::Net {
RadixTree* tree; RadixTree* tree;
Tools::string_trim(url, " /"); Tools::string_trim(url, " /");
auto splits = Tools::string_split(url, "/"); auto splits = Tools::string_split(url, "/");
if (tree = radix.get_node(splits->data(), splits->size())) tree->value["DELETE"] = req_handler; if ((tree = radix.get_node(splits->data(), splits->size()))) tree->value["DELETE"] = req_handler;
else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "DELETE", req_handler }})); else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "DELETE", req_handler }}));
} }
@ -59,7 +59,7 @@ namespace Bk::Net {
RadixTree* tree; RadixTree* tree;
Tools::string_trim(url, " /"); Tools::string_trim(url, " /");
auto splits = Tools::string_split(url, "/"); auto splits = Tools::string_split(url, "/");
if (tree = radix.get_node(splits->data(), splits->size())) tree->value["PUT"] = req_handler; if ((tree = radix.get_node(splits->data(), splits->size()))) tree->value["PUT"] = req_handler;
else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "PUT", req_handler }})); else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "PUT", req_handler }}));
} }

@ -1,14 +1,14 @@
#include "linux_socket.h" #include "linux_socket.h"
#include <netinet/in.h>
#include <sys/socket.h>
namespace Bk::Net { namespace Bk::Net {
LinuxSocket::LinuxSocket(int id, IpVersion ver, IpProtocol proto) LinuxSocket::LinuxSocket(int id, struct sockaddr_in client_addr, IpVersion ver, IpProtocol proto)
: id(id), ip_proto(proto) : id(id), ip_proto(proto), addr(client_addr)
{ {
char myIP[16] = " ";
socklen_t len = sizeof(addr); char* myIP = inet_ntoa(addr.sin_addr);
getsockname(id, (struct sockaddr*)&addr, &len); ip_addr = IpAddress(std::string(myIP), ver);
inet_ntop((int)ver, &addr, myIP, sizeof(myIP));
ip_addr = IpAddress(std::string(myIP, 16), ver);
} }
LinuxSocket::LinuxSocket(IpAddress ip, int port, IpProtocol proto) LinuxSocket::LinuxSocket(IpAddress ip, int port, IpProtocol proto)
@ -55,8 +55,9 @@ namespace Bk::Net {
Socket* LinuxSocket::ack() Socket* LinuxSocket::ack()
{ {
socklen_t addrlen = sizeof(addr); struct sockaddr_in client_addr;
return new LinuxSocket(accept(id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto); socklen_t addrlen = sizeof(client_addr);
return new LinuxSocket(accept(id, (struct sockaddr*)&client_addr, &addrlen), client_addr, ip_addr.version, ip_proto);
} }
bool LinuxSocket::conn() bool LinuxSocket::conn()
@ -69,14 +70,6 @@ namespace Bk::Net {
return true; return true;
} }
bool LinuxSocket::hasConnection(int seconds, int microseconds) {
struct timeval tv = { seconds, microseconds };
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(id, &rfds);
return select(id + 1, &rfds, (fd_set*)0, (fd_set*)0, &tv) > 0;
};
void LinuxSocket::emit(std::vector<char> packet) void LinuxSocket::emit(std::vector<char> packet)
{ {
write(id, packet.data(), packet.size()); write(id, packet.data(), packet.size());
@ -95,9 +88,4 @@ namespace Bk::Net {
{ {
return new LinuxSocket(ip, port, proto); return new LinuxSocket(ip, port, proto);
} }
Socket* Socket::create(int id, IpVersion ver, IpProtocol proto)
{
return new LinuxSocket(id, ver, proto);
}
} }

@ -8,7 +8,7 @@ namespace Bk::Net {
{ {
public: public:
LinuxSocket(IpAddress ip, int port, IpProtocol proto); LinuxSocket(IpAddress ip, int port, IpProtocol proto);
LinuxSocket(int id, IpVersion ver, IpProtocol proto); LinuxSocket(int id, struct sockaddr_in client_addr, IpVersion ver, IpProtocol proto);
virtual ~LinuxSocket(); virtual ~LinuxSocket();
bool init() override; bool init() override;
@ -16,8 +16,6 @@ namespace Bk::Net {
Socket* ack() override; Socket* ack() override;
bool conn() override; bool conn() override;
bool hasConnection(int seconds = 0, int microseconds = 0) override;
int get_raw_socket() override { return id; } int get_raw_socket() override { return id; }
const std::string get_ip() override { return ip_addr.str; } const std::string get_ip() override { return ip_addr.str; }

@ -69,7 +69,7 @@ namespace Bk::Net {
Socket* WindowsSocket::ack() Socket* WindowsSocket::ack()
{ {
socklen_t addrlen = sizeof(addr); socklen_t addrlen = sizeof(addr);
return WindowsSocket(accept((SOCKET)id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto)); return new WindowsSocket(accept((SOCKET)id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto));
} }
bool WindowsSocket::conn() bool WindowsSocket::conn()
@ -104,9 +104,4 @@ namespace Bk::Net {
{ {
return new WindowsSocket(ip, port, proto); return new WindowsSocket(ip, port, proto);
} }
Socket* Socket::create(int id, IpVersion ver, IpProtocol proto)
{
return new WindowsSocket(id, ver, proto);
}
} }
Loading…
Cancel
Save