my_teams
protocol.h
Go to the documentation of this file.
1 /*
2 ** EPITECH PROJECT, 2024
3 ** my_teams
4 ** File description:
5 ** protocol
6 */
7 
8 #ifndef PROTOCOL_H_
9  #define PROTOCOL_H_
10 
11  #include <netinet/in.h>
12  #include <sys/queue.h>
13  #include <stdbool.h>
14 
15  #define DATA_SIZE 4096
16 
22 typedef struct p_network_data_s {
23  int sockfd;
24  struct sockaddr_in server_addr;
26 
31 typedef struct p_packet_s {
32  uint16_t type; // Type of the packet
33  uint8_t data[DATA_SIZE]; // Data
35 
41 typedef struct p_payload_s {
42  p_packet_t packet; // Packet
43  int fd; // File descriptor of the client
44  TAILQ_ENTRY(p_payload_s) entries; // Entry for TAILQ list
46 
51 typedef struct p_client_s {
52  fd_set master_read_fds; // Master file descriptor set
53  fd_set master_write_fds; // Master file descriptor set
54  fd_set readfds; // File descriptor set
55  fd_set writefds; // File descriptor set
56  int sockfd; // Socket file descriptor
57  p_network_data_t network_data; // Network data
58  TAILQ_ENTRY(p_client_s) entries; // Entry for TAILQ list
59  TAILQ_HEAD(, p_payload_s) payloads; // List of payloads
61 
67 typedef struct p_server_s {
69  fd_set master_read_fds;
71  fd_set read_fds;
72  fd_set write_fds;
73  TAILQ_HEAD(, p_client_s) clients;
74  TAILQ_HEAD(, p_payload_s) payloads;
76 
83 p_client_t *p_client_create(const char *ip, int port);
84 
91 
100 bool p_client_send_packet(const p_client_t *client, uint16_t type,
101  const void *data, int size);
102 
108 p_server_t *p_server_create(int port);
109 
116 
125  const p_packet_t *packet,
126  int client_fd,
128 );
129 
137 bool p_server_send_packet_type(uint16_t type, int client_fd,
138  p_server_t *server);
139 
147  uint16_t packet_type,
148  const void *payload_data
149 );
150 
157 
164 
171 
178 
185 
190 p_server_t *server_socket(int port);
191 
198 p_client_t *get_client(int fd, const p_server_t *server);
199 
205 
210 bool p_server_is_open(void);
211 
217 
218 #endif /* !PROTOCOL_H_ */
int client(int ac, char **av)
main function for the client is only used by main (is returned by the main function)
Definition: client.c:176
uint16_t type
Definition: logger.h:152
p_payload_t * p_client_listen(p_client_t *client)
Listen for incoming packets on the client.
Definition: p_client_listen.c:47
p_payload_t * p_server_listen(p_server_t *server)
Listen for incoming packets on the server.
Definition: p_server_listen.c:52
p_client_t * p_client_create(const char *ip, int port)
Create a client with given IP and port.
Definition: p_client_create.c:41
void p_client_close(p_client_t *client)
Close the client.
Definition: p_client_close.c:13
struct p_client_s p_client_t
void p_server_close(p_server_t *server)
Close the server.
Definition: p_server_close.c:13
bool p_client_send_packet(const p_client_t *client, uint16_t type, const void *data, int size)
Send a packet from the client.
Definition: p_client_send_packet.c:13
bool p_server_send_packet(const p_packet_t *packet, int client_fd, p_server_t *server)
Send a packet from the server to a specific client.
Definition: p_server_send_packet.c:12
p_client_t * get_client(int fd, const p_server_t *server)
Get the client with the given file descriptor.
Definition: get_client.c:12
bool server_setsockopt(p_server_t *server)
Set socket options for the server.
Definition: server_setsockopt.c:13
p_payload_t * p_create_payload(uint16_t packet_type, const void *payload_data)
Create a payload with given packet type, data, and size.
struct p_payload_s p_payload_t
bool p_server_is_open(void)
Check if the server is open.
Definition: p_server_create.c:30
p_server_t * server_socket(int port)
Create a socket for the server.
Definition: server_socket.c:12
struct p_server_s p_server_t
bool new_client(p_server_t *server)
Create a new client on the server.
Definition: new_client.c:12
struct p_packet_s p_packet_t
bool p_server_send_packet_type(uint16_t type, int client_fd, p_server_t *server)
Send a packet from the server to a specific client.
Definition: p_server_send_packet.c:25
bool server_listen(p_server_t *server)
Listen for incoming connections on the server.
Definition: server_listen.c:13
struct p_network_data_s p_network_data_t
#define DATA_SIZE
Definition: protocol.h:15
bool select_server(p_server_t *server)
Select the server for incoming packets.
Definition: select_server.c:14
bool server_bind(p_server_t *server)
Bind the server to the given port.
Definition: server_bind.c:13
p_server_t * p_server_create(int port)
Create a server with given port.
Definition: p_server_create.c:35
void server(const char *str_port)
Create a server.
Definition: server.c:56
Represents a client with socket file descriptor and network data.
Definition: protocol.h:51
fd_set writefds
Definition: protocol.h:55
TAILQ_ENTRY(p_client_s) entries
fd_set master_read_fds
Definition: protocol.h:52
fd_set master_write_fds
Definition: protocol.h:53
p_network_data_t network_data
Definition: protocol.h:57
fd_set readfds
Definition: protocol.h:54
TAILQ_HEAD(, p_payload_s) payloads
int sockfd
Definition: protocol.h:56
Represents network data including socket file descriptor and server address.
Definition: protocol.h:22
struct sockaddr_in server_addr
Definition: protocol.h:24
int sockfd
Definition: protocol.h:23
Represents a packet with type and data.
Definition: protocol.h:31
uint8_t data[DATA_SIZE]
Definition: protocol.h:33
uint16_t type
Definition: protocol.h:32
Represents a payload containing packet, network data, and actual data.
Definition: protocol.h:41
TAILQ_ENTRY(p_payload_s) entries
int fd
Definition: protocol.h:43
p_packet_t packet
Definition: protocol.h:42
Represents a server with network data, file descriptor set, and list of clients.
Definition: protocol.h:67
TAILQ_HEAD(, p_payload_s) payloads
fd_set read_fds
Definition: protocol.h:71
p_network_data_t network_data
Definition: protocol.h:68
fd_set master_read_fds
Definition: protocol.h:69
fd_set master_write_fds
Definition: protocol.h:70
TAILQ_HEAD(, p_client_s) clients
fd_set write_fds
Definition: protocol.h:72