Threads and Scheduling
1#ifndef LIB_H_
2#define LIB_H_
3#include "enchufe.h"
4#include <assert.h>
5
6// Macro para detectar si un pointer es NULL. Usa esta funcion si prefieres
7// crashear el programa cuando encuetras un puntero NULL.
8#define exists(a) do { \
9 if ((a) == NULL) { \
10 fprintf(stderr, "[ERROR]: %s:%d Null pointer encountered, %s\n", __FILE__, __LINE__, strerror(errno)); \
11 exit (EXIT_FAILURE); \
12 } \
13 } while(0)
14
15// Esto es necesario por si prefieres que Proc aguante una unidad de tiempo
16// distinta.
17typedef Byte Time;
18
19// Esto sera lo que se envia y recibe por el socket.
20typedef struct {
21 Time time;
22 Buffer program;
23} Proc;
24
25// Esto es para crear una lista dinamica de Procs.
26typedef struct {
27 Proc* procs;
28 size_t len;
29} Procs;
30
31// Esta funcion convierte un buffer en una lista de Proc's.
32Procs deserialize(Buffer out_buf, size_t msg_len);
33
34// Esta funcion convierte un Proc en un buffer.
35Buffer serialize(Proc);
36
37// Esta funcion convierte un string que representa un IPv4 en un IPv4.
38IPv4 parse_address(const char* str);
39
40// Esta funcion verifica que el string enviado por el socket sea valido.
41Buffer validate_str(Buffer str, size_t max_len);
42
43// Esta funcion crea una copia de un buffer en memoria y lo devuelve.
44Buffer bufcpy(Buffer in);
45
46// Esta funcion es mejor que strlen.
47size_t safe_strlen(const char* str, size_t max_len);
48
49#endif // LIB_H_