-
Notifications
You must be signed in to change notification settings - Fork 0
/
comsock.h
122 lines (105 loc) · 3.83 KB
/
comsock.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
/** \file
* \author lso10
* \brief libreria di comunicazione socket AF_UNIX
*
*/
#ifndef _COMSOCK_H
#define _COMSOCK_H
/* -= TIPI =- */
/** <H3>Messaggio</H3>
* La struttura \c message_t rappresenta un messaggio
* - \c type rappresenta il tipo del messaggio
* - \c length rappresenta la lunghezza in byte del campo buffer
* - \c buffer e' il puntatore al messaggio (puo' essere NULL se length == 0)
*
* <HR>
*/
typedef struct {
char type; /** tipo del messaggio */
unsigned int length; /** lunghezza in byte */
char* buffer; /** buffer messaggio */
} message_t;
/** lunghezza buffer indirizzo AF_UNIX */
#define UNIX_PATH_MAX 108
/** fine dello stream su socket, connessione chiusa dal peer */
#define SEOF -2
/** Error Socket Path Too Long (exceeding UNIX_PATH_MAX) */
#define SNAMETOOLONG -11
/** numero di tentativi di connessione da parte del client */
#define NTRIALCONN 3
/** tipi dei messaggi scambiati fra server e client */
/** richiesta di connessione utente */
#define MSG_CONNECT 'C'
/** errore */
#define MSG_ERROR 'E'
/** OK */
#define MSG_OK '0'
/** NO */
#define MSG_NO 'N'
/** messaggio a un singolo utente */
#define MSG_TO_ONE 'T'
/** messaggio in broadcast */
#define MSG_BCAST 'B'
/** lista utenti connessi */
#define MSG_LIST 'L'
/** uscita */
#define MSG_EXIT 'X'
/* -= FUNZIONI =- */
/** Crea una socket AF_UNIX
* \param path pathname della socket
*
* \retval s il file descriptor della socket (s>0)
* \retval SNAMETOOLONG se il nome del socket eccede UNIX_PATH_MAX
* \retval -1 in altri casi di errore (sets errno)
*
* in caso di errore ripristina la situazione inziale: rimuove eventuali socket create e chiude eventuali file descriptor rimasti aperti
*/
int createServerChannel(char* path);
/** Chiude una socket
* \param s file descriptor della socket
*
* \retval 0 se tutto ok,
* \retval -1 se errore (sets errno)
*/
int closeSocket(int s);
/** accetta una connessione da parte di un client
* \param s socket su cui ci mettiamo in attesa di accettare la connessione
*
* \retval c il descrittore della socket su cui siamo connessi
* \retval -1 in casi di errore (sets errno)
*/
int acceptConnection(int s);
/** legge un messaggio dalla socket
* \param sc file descriptor della socket
* \param msg struttura che conterra' il messagio letto
* (deve essere allocata all'esterno della funzione,
* tranne il campo buffer)
*
* \retval lung lunghezza del buffer letto, se OK
* \retval SEOF se il peer ha chiuso la connessione
* (non ci sono piu' scrittori sulla socket)
* \retval -1 in tutti gl ialtri casi di errore (sets errno)
*
*/
int receiveMessage(int sc, message_t * msg);
/** scrive un messaggio sulla socket
* \param sc file descriptor della socket
* \param msg struttura che contiene il messaggio da scrivere
*
* \retval n il numero di caratteri inviati (se scrittura OK)
* \retval SEOF se il peer ha chiuso la connessione
* (non ci sono piu' lettori sulla socket)
* \retval -1 in tutti gl ialtri casi di errore (sets errno)
*/
int sendMessage(int sc, message_t *msg);
/** crea una connessione all socket del server. In caso di errore funzione tenta NTRIALCONN volte la connessione (a distanza di 1 secondo l'una dall'altra) prima di ritornare errore.
* \param path nome del socket su cui il server accetta le connessioni
*
* \return 0 se la connessione ha successo
* \retval SNAMETOOLONG se il nome del socket eccede UNIX_PATH_MAX
* \retval -1 negli altri casi di errore (sets errno)
*
* in caso di errore ripristina la situazione inziale: rimuove eventuali socket create e chiude eventuali file descriptor rimasti aperti
*/
int openConnection(char* path);
#endif