-
Notifications
You must be signed in to change notification settings - Fork 0
/
message.h
109 lines (96 loc) · 2.25 KB
/
message.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
* chatterbox Progetto del corso di LSO 2017
*
* Dipartimento di Informatica Università di Pisa
* Docenti: Prencipe, Torquati
*
*/
#ifndef MESSAGE_H_
#define MESSAGE_H_
#include <assert.h>
#include <string.h>
#include <config.h>
#include <ops.h>
#include <stdio.h>
/**
* @file message.h
* @brief Contiene il formato del messaggio
*/
/**
* @struct header
* @brief header del messaggio
*
* @var op tipo di operazione richiesta al server
* @var sender nickname del mittente
*/
typedef struct {
op_t op;
char sender[MAX_NAME_LENGTH+1];
} message_hdr_t;
/**
* @struct header
* @brief header della parte dati
*
* @var receiver nickname del ricevente
* @var len lunghezza del buffer dati
*/
typedef struct {
char receiver[MAX_NAME_LENGTH+1];
unsigned int len;
} message_data_hdr_t;
/**
* @struct data
* @brief body del messaggio
*
* @var hdr header della parte dati
* @var buf buffer dati
*/
typedef struct {
message_data_hdr_t hdr;
char *buf;
} message_data_t;
/**
* @struct messaggio
* @brief tipo del messaggio
*
* @var hdr header
* @var data dati
*/
typedef struct {
message_hdr_t hdr;
message_data_t data;
} message_t;
/* ------ funzioni di utilità ------- */
/**
* @function setheader
* @brief scrive l'header del messaggio
*
* @param hdr puntatore all'header
* @param op tipo di operazione da eseguire
* @param sender mittente del messaggio
*/
static inline void setHeader(message_hdr_t *hdr, op_t op, char *sender) {
#if defined(MAKE_VALGRIND_HAPPY)
memset((char*)hdr, 0, sizeof(message_hdr_t));
#endif
hdr->op = op;
strncpy(hdr->sender, sender, strlen(sender)+1);
}
/**
* @function setData
* @brief scrive la parte dati del messaggio
*
* @param msg puntatore al body del messaggio
* @param rcv nickname o groupname del destinatario
* @param buf puntatore al buffer
* @param len lunghezza del buffer
*/
static inline void setData(message_data_t *data, char *rcv, const char *buf, unsigned int len) {
#if defined(MAKE_VALGRIND_HAPPY)
memset((char*)&(data->hdr), 0, sizeof(message_data_hdr_t));
#endif
strncpy(data->hdr.receiver, rcv, strlen(rcv)+1);
data->hdr.len = len;
data->buf = (char *)buf;
}
#endif /* MESSAGE_H_ */