-
Notifications
You must be signed in to change notification settings - Fork 0
/
connections.h
123 lines (109 loc) · 3.35 KB
/
connections.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
* chatterbox Progetto del corso di LSO 2017/2018
*
* Dipartimento di Informatica Università di Pisa
* Docenti: Prencipe, Torquati
*
*/
/**
* Connections implementa il core della comunicazione tra client e server.
* È in grado di leggere e scrivere header e data di messaggi di tipo message_t.
* La comunicazione gira su un socket di tipo AF_UNIX.
*
* @see message.h
*
* @file connections.h
*
* @author Stefano Spadola 534919
* Si dichiara che il contenuto di questo file e' in ogni sua parte opera
* originale dell'autore
*
* @brief Contine le funzioni che implementano il protocllo di comunicazione tra il client ed il server
*/
#ifndef CONNECTIONS_H_
#define CONNECTIONS_H_
#define MAX_RETRIES 10
#define MAX_SLEEPING 3
#if !defined(UNIX_PATH_MAX)
#define UNIX_PATH_MAX 64
#endif
#include "message.h"
#include "connections.h"
/**
* @brief Apre una connessione attravverso un socket AF_UNIX verso il server
*
* @param path Path del socket AF_UNIX
* @param ntimes numero massimo di tentativi di retry
* @param secs tempo di attesa tra due retry consecutive
*
* @return fd associato alla connessione in caso di successo
* @return -1 in caso di errore
*/
int openConnection(char* path, unsigned int ntimes, unsigned int secs);
// -------- server side -----
/**
* @brief Legge l'header del messaggio dal socket
*
* @param fd descrittore della connessione
* @param hdr puntatore all'header del messaggio da ricevere
*
* @return <=0 se c'e' stato un errore
* (se <0 errno deve essere settato, se == 0 connessione chiusa)
* @return 1 in caso di successo
*/
int readHeader(long connfd, message_hdr_t *hdr);
/**
* @brief Legge il body del messaggio dal socket
*
* @param fd descrittore della connessione
* @param data puntatore al body del messaggio
*
* @return <=0 se c'e' stato un errore
* (se <0 errno deve essere settato, se == 0 connessione chiusa)
* @return 1 in caso di successo
*/
int readData(long fd, message_data_t *data);
/**
* @brief Legge l'intero messaggio (header + data) dal socket
*
* @param fd descrittore della connessione
* @param data puntatore al messaggio
*
* @return <=0 se c'e' stato un errore
* (se <0 errno deve essere settato, se == 0 connessione chiusa)
* @return 1 in caso di successo
*/
int readMsg(long fd, message_t *msg);
/* da completare da parte dello studente con altri metodi di interfaccia */
// ------- client side ------
/**
* @brief Scrive un intero messaggio sul socket
*
* @param fd descrittore della connessione
* @param msg puntatore al messaggio da inviare
*
* @return <=0 se c'e' stato un errore
* @return 1 in caso di successo
*/
int sendRequest(long fd, message_t *msg);
/**
* @brief Scrive il body del messaggio sul socket
*
* @param fd descrittore della connessione
* @param msg puntatore al messaggio da inviare
*
* @return <=0 se c'e' stato un errore
* @return 1 in caso di successo
*/
int sendData(long fd, message_data_t *msg);
/* da completare da parte dello studente con eventuali altri metodi di interfaccia */
/**
* @brief Scrive l'header del messaggio sul socket
*
* @param fd descrittore della connessione
* @param hdr puntatore all'header da inviare
* @return <=0 se c'è stato un errore
* @return 1 in caso di successo
*/
int sendHeader(long fd, message_hdr_t *hdr);
#endif /* CONNECTIONS_H_ */