-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreadArgs.c
94 lines (73 loc) · 2.3 KB
/
readArgs.c
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
#include "readArgs.h"
void read_args(int argc, char const *argv[], struct sockaddr_in *id_server){
/* no caso de ser só rmb */
switch(argc){
case 1:
/* se só houver um argumento, rmb, então por omissão o ip do id_server é o do tejo e a porta é a 59000 */
break;
case 2:
printf("Chamada inválida, o número de argumentos é inválido\n");
exit(1);
break;
case 3:
if ( strcmp(argv[1], "-i") == 0) {
if(inet_aton(argv[2], (void *) &(id_server->sin_addr)) == 0){
printf("Not a valid IP address. Check it and rerun please\n");
exit(1);
}
}
else if ( strcmp(argv[1], "-p") == 0) {
id_server->sin_port = htons( (unsigned short) atoi(argv[2]) );
}
else {
printf("Chamada inválida, os argumentos são inválido\n");
exit (1);
}
break;
case 4:
printf("Chamada inválida, o número de argumentos é inválido\n");
exit(1);
break;
case 5:
if ( strcmp(argv[1], "-i") == 0) {
inet_aton(argv[2], (void *) &(id_server->sin_addr) );
}
else if ( strcmp(argv[1], "-p") == 0) {
id_server->sin_port = htons( (unsigned short) atoi(argv[2]) );
}
else {
printf("Chamada inválida, os argumentos são inválidos\n");
exit (1);
}
if ( strcmp(argv[3], "-i") == 0) {
inet_aton(argv[4], (void *) &(id_server->sin_addr) );
}
else if ( strcmp(argv[3], "-p") == 0) {
id_server->sin_port = htons( (unsigned short) atoi(argv[4]) );
}
else {
printf("Chamada inválida, os argumentos são inválidos\n");
exit (1);
}
break;
default:
printf("Chamada inválida, o número de argumentos é inválido (default)\n");
exit (1);
break;
}
return;
}
// dá os parametros de omissão ao servidor de identidades
// Recebe a estrutura que guarda a identidade do Servidor de Indentidades
void setDefaultSettings(struct sockaddr_in *id_server, socklen_t *addrlen) {
char server_name[] = "tejo.tecnico.ulisboa.pt";
unsigned short omission_port = 59000;
struct hostent *h;
if ( (h = gethostbyname(server_name) ) == NULL ) {
printf("Error in gethostbyname: %s\n", hstrerror(h_errno) );
exit (1);
}
// É preparada a socket em que se dará a interação com o Servidor de Identidades
setSockaddr(id_server, addrlen, (struct in_addr *) (h->h_addr_list[0]), omission_port);
return;
}