Arion 1.0.2-alpha
A high-performance C++ framework for emulating executable binaries.
 
Loading...
Searching...
No Matches
socket_manager.hpp
Go to the documentation of this file.
1#ifndef ARION_SOCKET_MANAGER_HPP
2#define ARION_SOCKET_MANAGER_HPP
3
5#include <cstring>
6#include <map>
7#include <memory>
8#include <string>
9#include <sys/socket.h>
10#include <vector>
11
12namespace arion
13{
14
15class Arion;
16
19{
21 int fd;
23 int family;
25 int type;
29 std::string ip;
31 uint16_t port;
33 std::string path;
35 bool server = false;
37 bool server_listen = false;
39 int server_backlog = 0;
41 bool blocking = false;
43 socklen_t s_addr_sz = 0;
45 sockaddr *s_addr = nullptr;
57 ARION_SOCKET(int fd, int family, int type, int protocol)
58 : fd(fd), family(family), type(type), protocol(protocol) {};
63 ARION_SOCKET(std::shared_ptr<ARION_SOCKET> s)
64 : fd(s->fd), family(s->family), type(s->type), protocol(s->protocol), ip(s->ip), port(s->port), path(s->path),
65 server(s->server), server_listen(s->server_listen), server_backlog(s->server_backlog), blocking(s->blocking),
66 s_addr_sz(s->s_addr_sz)
67 {
68 if (s->s_addr && s->s_addr_sz)
69 {
70 s_addr = (sockaddr *)malloc(s->s_addr_sz);
71 memcpy(s_addr, s->s_addr, s->s_addr_sz);
72 }
73 };
79 : fd(s->fd), family(s->family), type(s->type), protocol(s->protocol), ip(s->ip), port(s->port), path(s->path),
80 server(s->server), server_listen(s->server_listen), server_backlog(s->server_backlog), blocking(s->blocking),
81 s_addr_sz(s->s_addr_sz)
82 {
83 if (s->s_addr && s->s_addr_sz)
84 {
85 s_addr = (sockaddr *)malloc(s->s_addr_sz);
86 memcpy(s_addr, s->s_addr, s->s_addr_sz);
87 }
88 };
93 {
94 if (s_addr)
95 free(s_addr);
96 s_addr = nullptr;
97 }
98};
99/*
100 * Serializes an ARION_SOCKET instance into a vector of bytes.
101 * @param[in] arion_s The ARION_SOCKET to be serialized.
102 * @return The serialized vector of bytes.
103 */
104std::vector<BYTE> serialize_arion_socket(ARION_SOCKET *arion_s);
105/*
106 * Deserializes an ARION_SOCKET instance from a vector of bytes.
107 * @param[in] srz_socket The serialized vector of bytes.
108 * @return The deserialized ARION_SOCKET.
109 */
110ARION_SOCKET *deserialize_arion_socket(std::vector<BYTE> srz_socket);
111
115{
116 private:
118 std::weak_ptr<Arion> arion;
119
120 public:
122 std::map<int, std::shared_ptr<ARION_SOCKET>> sockets;
128 static std::unique_ptr<SocketManager> initialize(std::weak_ptr<Arion> arion);
133 SocketManager(std::weak_ptr<Arion> arion) : arion(arion) {};
139 void ARION_EXPORT add_socket_entry(int target_fd, std::shared_ptr<ARION_SOCKET> socket);
145 bool ARION_EXPORT has_socket_entry(int target_fd);
150 void ARION_EXPORT rm_socket_entry(int target_fd);
156 std::shared_ptr<ARION_SOCKET> ARION_EXPORT get_arion_socket(int target_fd);
157};
158
159}; // namespace arion
160
161#endif // ARION_SOCKET_MANAGER_HPP
Definition socket_manager.hpp:115
std::shared_ptr< ARION_SOCKET > get_arion_socket(int target_fd)
SocketManager(std::weak_ptr< Arion > arion)
Definition socket_manager.hpp:133
std::map< int, std::shared_ptr< ARION_SOCKET > > sockets
A map identifying a socket given its UNIX file descriptor.
Definition socket_manager.hpp:122
bool has_socket_entry(int target_fd)
void rm_socket_entry(int target_fd)
std::weak_ptr< Arion > arion
The Arion instance associated to this instance.
Definition socket_manager.hpp:118
void add_socket_entry(int target_fd, std::shared_ptr< ARION_SOCKET > socket)
static std::unique_ptr< SocketManager > initialize(std::weak_ptr< Arion > arion)
#define ARION_EXPORT
Defines which symbols should be exported from the library.
Definition global_defs.hpp:13
Definition arch_x86-64.hpp:11
std::vector< BYTE > serialize_arion_socket(ARION_SOCKET *arion_s)
ARION_SOCKET * deserialize_arion_socket(std::vector< BYTE > srz_socket)
This structure holds data about a UNIX socket.
Definition socket_manager.hpp:19
int fd
File Descriptor of the socket.
Definition socket_manager.hpp:21
ARION_SOCKET(ARION_SOCKET *s)
Definition socket_manager.hpp:78
int family
UNIX family of the socket (e.g, AF_UNIX, AF_INET).
Definition socket_manager.hpp:23
socklen_t s_addr_sz
Length of the socket sockaddr address, when relevant.
Definition socket_manager.hpp:43
sockaddr * s_addr
The socket sockaddr address, when relevant.
Definition socket_manager.hpp:45
int protocol
UNIX protocol of the socket.
Definition socket_manager.hpp:27
~ARION_SOCKET()
Definition socket_manager.hpp:92
std::string path
Path associated to the socket, when relevant.
Definition socket_manager.hpp:33
int type
UNIX type of the socket (e.g, SOCK_STREAM, SOCK_DGRAM).
Definition socket_manager.hpp:25
ARION_SOCKET(std::shared_ptr< ARION_SOCKET > s)
Definition socket_manager.hpp:63
ARION_SOCKET()
Definition socket_manager.hpp:49
ARION_SOCKET(int fd, int family, int type, int protocol)
Definition socket_manager.hpp:57
uint16_t port
Port associated to the socket, when relevant.
Definition socket_manager.hpp:31
std::string ip
IP address associated to the socket, when relevant.
Definition socket_manager.hpp:29